5

注入自定義成員資格提供程序我使用了StructureMap的一些功能,並且設法在控制器(通過構造函數注入)中注入一個接口的具體類型存儲庫。使用StructureMap

現在,我需要在我的自定義成員資格提供程序中注入存儲庫類型。但是如何?我的自定義會員供應商是通過Membership.Provider.ValidateUser(例如)創建的。

對於控制器我創建這樣的一個類:

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

Global.asax,在Application_Start()

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


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

但如何注入與StructureMap我自定義的成員提供的具體類型?

+0

可能的重複[屬性注入自定義會員供應商使用城堡](http://stackoverflow.com/questions/10174636/property-injection-in-custom-membership-provider-using-castle) – Steven 2012-07-31 12:28:01

回答

3

在這種情況下,我認爲沒有辦法注入。

只有在創建實例所需的「工廠」,瞭解注入以及成員資格提供者區域不幸顯示它的年齡時,注入纔有效。當事情完成不同時,它被編碼回來:)。

如果您使用的是與ASP.NET MVC(版本2+)您的自定義成員資格提供,你可以得到你所需要的從DependencyResolver要求它像這樣:

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

或者你可以大概直接使用ObjectFactory。

+0

我不明白。我在我的自定義成員資格提供程序中使用它,而不是在Application.Start()中的Global.asax中寫入任何內容? – Blocked 2012-07-31 11:29:58

+0

不,您仍然需要在Application_Start()或類似DependencyResolver.SetResolver(新的StructureMapDependencyResolver(容器))的引導類型類中添加自定義Dependency Resolver;其中StructureMapDependencyResolver是您的自定義類,容器是您的StructureMap IContainer。更多信息在這裏:http://ericsowell.com/blog/2011/1/20/structuremap-and-asp-net-mvc-3-getting-started – stephenbayer 2013-07-10 20:52:46