我试图理解这里为usermanager的每个请求生命周期管理解释的UserManagerFactory中间件。
我创建了这个类,我从启动配置方法中调用
public class CustomUserManagerProvider
{
public static CustomUserStore<CustomUser> CreateCustomUserStore()
{
return new CustomUserStore<CustomUser>(/*Need to inject dependencies here*/);
}
public static CustomUserManager CreateCustomUserManager(IdentityFactoryOptions<CustomUserManager> options,
IOwinContext context)
{
return new CustomUserManager(context.Get<CustomUserStore<CustomUser>>());
}
}
和启动配置
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(CustomUserManagerProvider.CreateCustomUserStore);
app.CreatePerOwinContext<IngramUserManager>(CustomUserManagerProvider.CreateCustomUserManager);
////....Other things
}
现在,我的CustomUserStore有一些依赖,我想注入到构造函数中。
IOC容器的组合根知道如何解析这些依赖关系。
我如何使CustomUserManagerProvider
DI容器意识到(如果这有意义)…
public static CustomUserStore<CustomUser> CreateCustomUserStore()
{
var dependency = DependencyResolver.Current.GetService<ISomeDependency>();
return new CustomUserStore<CustomUser>(dependency);
}
但是,我试图避免服务定位器(反)模式。这是我唯一的选择吗,这对吗?
我正在使用Ninject。
我不能只是创建一个UserManager在requestScope的组合根和注入到控制器,这不是一样的事情吗?
在web应用程序中,CreatePerOwinContext是否与创建InRequestScope相同?
是的,如果你喜欢,你可以用不同的方式注入UserManager到你的控制器中,没有什么需要使用CreatePerOwinContext/IdentityFactoryMiddleware