我使用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 :(得分:3)
我认为在这种情况下没有办法注入。
注入仅在创建所需实例的“工厂”,知道注入以及不幸的是会员提供者区域显示它的年龄时起作用。当事情以不同的方式完成时,它被编码回来:)。
如果您将自定义成员资格提供程序与ASP.NET MVC(版本2+)一起使用,则可以通过DependencyResolver从中获取所需内容,如下所示:
DependencyResolver.Current.GetService<IRepository<User>>();
或者您可以直接使用ObjectFactory。