C#-在身份验证后更改DbContext ConnectionString
我正在尝试创建一个应用程序,根据经过身份验证的用户更改DbConnection字符串 因此,在用户登录后,我必须获得该用户,查看类似“connectionName”的字段,并在我的app.config上查找该connectionString以连接到我的数据库 我已经知道如何设置依赖项注入以传递构造函数参数,但是如何让登录用户访问依赖项注入项目 像这样的 这是一个名为“Project.Infra”的项目 DBContextC#-在身份验证后更改DbContext ConnectionString,c#,database,entity-framework,C#,Database,Entity Framework,我正在尝试创建一个应用程序,根据经过身份验证的用户更改DbConnection字符串 因此,在用户登录后,我必须获得该用户,查看类似“connectionName”的字段,并在我的app.config上查找该connectionString以连接到我的数据库 我已经知道如何设置依赖项注入以传递构造函数参数,但是如何让登录用户访问依赖项注入项目 像这样的 这是一个名为“Project.Infra”的项目 DBContext public class MyDbContext : 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”的项目中
依赖注射
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()); }
}
公共静态类依赖解析程序
{
公共静态无效解析(UnityContainer容器)
{
//如何在这里获得有关我的应用程序中已登录用户的详细信息?
RegisterType(新层次结构CallifeTimeManager(),新注入构造函数(“HereWillComeTheConnection”);
container.RegisterType(新层次结构CallifetimeManager());}
}
为什么不使用工厂模式。创建一个DbContextFactory,该工厂将能够基于经过身份验证的用户使用适当的连接字符串创建DbContext。同意Nkosi。然后我想您可以插入DbContextFactory
而不是DbContext
。我已经尝试过了,但是我无法通过“user.Identity”访问我的用户数据。。。我必须缓存我的信息或类似的东西。为什么不使用工厂模式呢。创建一个DbContextFactory,该工厂将能够基于经过身份验证的用户使用适当的连接字符串创建DbContext。同意Nkosi。然后我想您可以插入DbContextFactory
而不是DbContext
。我已经尝试过了,但是我无法通过“user.Identity”访问我的用户数据。。。我必须缓存我的信息或类似的东西。