【发布时间】:2014-03-22 01:15:00
【问题描述】:
我正在尝试理解这里 per request lifetime management for 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。
我不能只在组合根目录的 requestScope 中创建一个 UserManager 并注入到控制器中,那不是一回事吗?
在 Web 应用中,CreatePerOwinContext 是否与创建 InRequestScope 相同?
【问题讨论】:
标签: c# asp.net-identity