如何使用Autofac和ASP.NET MVC为每个用户创建一个具有不同连接字符串的DataContext?

时间:2016-09-19 10:55:15

标签: asp.net-mvc dependency-injection entity-framework-6 autofac asp.net-identity-2

我正在使用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>();
    }

0 个答案:

没有答案