使用StructureMap在自定义会员提供程序中注入

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

1个回答

3

我认为在这种情况下无法进行注入。

注入只有在创建实例的“工厂”知道注入时才能起作用,而Membership提供程序区域不幸地显示出它的陈旧性。它是在事情处理方式不同的时候编写的 :)

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

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

您可以直接使用ObjectFactory。

我不理解。我在我的自定义成员资格提供程序中使用它,并且没有在Global.asax中的Application_Start()中编写任何内容? - Blocked
不,你仍然需要在Application_Start()或类似于DependencyResolver.SetResolver(new StructureMapDependencyResolver(container))的引导类型类中添加自定义依赖项解析器,其中StructureMapDependencyResolver是您的自定义类,container是您的StructureMap IContainer。更多信息请参见:http://ericsowell.com/blog/2011/1/20/structuremap-and-asp-net-mvc-3-getting-started - stephenbayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接