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

时间:2012-07-31 11:03:42

标签: c# asp.net-mvc asp.net-mvc-2 structuremap membership-provider

我使用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在我的自定义成员资格提供程序中注入具体类型?

1 个答案:

答案 0 :(得分:3)

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

注入仅在创建所需实例的“工厂”,知道注入以及不幸的是会员提供者区域显示它的年龄时起作用。当事情以不同的方式完成时,它被编码回来:)。

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

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

或者您可以直接使用ObjectFactory。