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