使用StructureMap在自定义成员资格提供程序中注入

Blo*_*ked 5 c# structuremap asp.net-mvc membership-provider asp.net-mvc-2

我使用StructureMap做了一点工作,我设法在我的控制器中注入(通过构造函数注入)一个接口的具体类型存储库.

现在,我需要将存储库类型注入我的自定义成员资格提供程序.但是怎么样?我的自定义成员资格提供程序是通过Membership.Provider.ValidateUser(例如)创建的.

对于控制器我创建了一个这样的类:

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

并在Global.asaxApplication_Start():

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


ControllerBuilder.Current.SetControllerFactory(
    new IocControllerFactory());
//...
Run Code Online (Sandbox Code Playgroud)

但是如何使用StructureMap在我的自定义成员资格提供程序中注入具体类型?

Ste*_*rup 3

我认为在这种情况下没有办法注入。

仅当“工厂”创建所需的实例、了解注入并且会员资格提供程序区域不幸显示其年龄时,注入才有效。当事情以不同方式完成时,它会被编码回来:)。

如果您将自定义成员资格提供程序与 ASP.NET MVC(版本 2+)一起使用,则可以通过从 DependencyResolver 请求来获取所需内容,如下所示:

DependencyResolver.Current.GetService<IRepository<User>>();
Run Code Online (Sandbox Code Playgroud)

或者您可以直接使用 ObjectFactory。