我正在使用autofac来解析我的asp.net mvc应用程序的依赖关系。在这里,我按照这样的HTTP请求创建数据库工厂。
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().WithParameter("con", SmartSession.Con).InstancePerHttpRequest();
不同的用户将为参数&#34; con&#34;传递不同的值。我的目的是为我部署的应用程序提供不同用户的不同数据库连接。但在这里我的假设变坏了。问题是,要创建databasefactory的新实例,我必须在用户想要登录时运行autofac解析器。但它也改变了仍在使用的用户的datacontext。所以我的问题是人们通常如何处理这种情况? 我正在使用EF6和Identity 2.存储库使用BaseRepository,它使用DatabaseFactory。 DatabaseFactory返回datacontext。
public class DatabaseFactory : Disposable, IDatabaseFactory
{
private SmartEntities _dataContext;
string con;
public DatabaseFactory(string con)
{
this.con = con;
}
public SmartEntities Get()
{
return _dataContext ?? (_dataContext = new SmartEntities(con));
}
protected override void DisposeCore()
{
if (_dataContext != null)
_dataContext.Dispose();
}
}
在RepositoryBase中
protected RepositoryBase(IDatabaseFactory databaseFactory)
{
DatabaseFactory = databaseFactory;
_dbset = DataContext.Set<T>();
}