5

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

4

1 回答 1

3

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

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

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

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

或者您可以直接使用 ObjectFactory。

于 2012-07-31T11:13:58.237 回答