C# - 在Auth之后更改DbContext ConnectionString

时间:2016-08-05 03:10:20

标签: c# database entity-framework

我正在尝试根据经过身份验证的用户创建一个更改DbConnection字符串的应用程序。

因此,在用户登录后,我必须得到该用户,看到像“connectionName”这样的字段,并在我的app.config上查找该connectionString以连接到我的数据库。

我已经知道如何设置我的依赖注入以传递构造函数参数,但是如何获取我的依赖注入器项目已记录的用户?

像这样。

这是一个名为“Project.Infra”的项目

的DbContext

public class MyDbContext : DbContext
{
    //ConnectionStringBasedOnUserLogged will be a propertie on my userModel
    //so I have to get the logged user before have it.
    public MyDbContext(string ConnectionStringBasedOnUserLogged)
        : base(ConnectionStringBasedOnUserLogged)
    {
        Configuration.ProxyCreationEnabled = false;
        Configuration.LazyLoadingEnabled = false;
    }

    //DbSets...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    //Mappings...
    }
}

这是一个名为“Project.Infra”的项目

存储库

public class MyRepository : IMyRepository
{
    private MyDbContext _ctx;

    public MyRepository(MyDbContextcontext)
    {
        this._ctx = context;
    }

    //Implementation of interface...
}

这是一个名为“Project.Api”的项目

控制器

public class MyController : ApiController
{
    private IMyRepository _repo;

    public MyController(IMyRepository repo)
    {
        this._repo = repo;
    }
    //Implementation
}

这是一个名为“Project.Startup”的项目

DepencyInjection

public static class DependencyResolver
{
    public static void Resolve(UnityContainer container)
    {
        //How do I get here some details about the logged user at my application ?
        container.RegisterType<MyDbContext, MyDbContext>(new HierarchicalLifetimeManager(), new InjectionConstructor("HereWillComeTheConnection"));
        container.RegisterType<IMyRepository, MyRepository>(new HierarchicalLifetimeManager());        }
}

0 个答案:

没有答案