5

Tôi đã làm việc một chút với StructureMap và tôi quản lý để tiêm trong bộ điều khiển của tôi (thông qua xây dựng tiêm) một kho lưu trữ kiểu cụ thể cho một giao diện.Tiêm trong nhà cung cấp thành viên tùy chỉnh với StructureMap

Bây giờ, tôi cần phải đưa loại lưu trữ vào nhà cung cấp tư cách thành viên tùy chỉnh của mình. Nhưng bằng cách nào? Nhà cung cấp tư cách thành viên tùy chỉnh của tôi được tạo thông qua Membership.Provider.ValidateUser (ví dụ).

Đối với bộ điều khiển Tôi tạo ra một lớp học như thế này:

public class IocControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(
     System.Web.Routing.RequestContext requestContext, 
     Type controllerType) 
    { 
     return (Controller) 
      ObjectFactory.GetInstance(controllerType); 
    } 
} 

và trong Global.asax, trong Application_Start():

//... 
ObjectFactory.Initialize(x => 
{ 
    x.AddRegistry(new ArticleRegistry()); 
} 
            ); 


ControllerBuilder.Current.SetControllerFactory(
    new IocControllerFactory()); 
//... 

Nhưng làm thế nào tiêm một loại bê tông trong nhà cung cấp thành viên tùy chỉnh của tôi với StructureMap?

+0

bản sao có thể có của [Thuộc tính tiêm trong nhà cung cấp thành viên tùy chỉnh sử dụng Lâu đài] (http://stackoverflow.com/questions/10174636/property-injection-in-custom-membership-provider-using-castle) – Steven

Trả lời

3

Không có cách nào để tiêm trong trường hợp này tôi nghĩ.

Tiêm chỉ hoạt động khi "nhà máy" tạo ra các trường hợp cần thiết, biết về tiêm và khu vực nhà cung cấp thành viên không may là hiển thị tuổi của nó. Nó được mã hóa lại khi mọi thứ đã được thực hiện khác nhau :).

Nếu bạn đang sử dụng cung cấp thành viên tùy chỉnh của bạn với ASP.NET MVC (phiên bản 2+), bạn có thể có được những gì bạn cần bằng cách yêu cầu nó từ DependencyResolver như vậy:

DependencyResolver.Current.GetService<IRepository<User>>(); 

Hoặc bạn có thể có thể sử dụng ObjectFactory trực tiếp.

+0

Tôi không hiểu. Tôi sử dụng điều này trong nhà cung cấp thành viên tùy chỉnh của tôi và không viết bất cứ điều gì trong và trong Global.asax, trong Application_Start()? – Blocked

+0

Không, bạn vẫn cần phải thêm tùy chỉnh của bạn phụ thuộc Resolver trong Application_Start() hoặc trong một loại lớp bootstrap như DependencyResolver.SetResolver (mới StructureMapDependencyResolver (container)); nơi StructureMapDependencyResolver là lớp và container tùy chỉnh của bạn là StructureMap IContainer của bạn. thêm thông tin tại đây: http://ericsowell.com/blog/2011/1/20/structuremap-and-asp-net-mvc-3-getting-started – stephenbayer

Các vấn đề liên quan