M U*_*M U 1 c# entity-framework-core .net-core asp.net-core
我正在构建多租户应用程序并尝试使数据安全性正常运行.Context的单元测试工作得很好,因为我用options和UserContext创建了上下文,但我很难让它在程序集中工作,因为它需要注入userContext.
我不能像其他一样使用标准控制器注入,就像我拥有它一样,上下文创建失败:
services.AddEntityFrameworkNpgsql()
.AddDbContext<MultiTenantContext>(o =>
o.UseNpgsql(Configuration.GetConnectionString("DbContext")
Run Code Online (Sandbox Code Playgroud)
我不能或我不知道如何以这种方式注入我的UserContext ...
简单使用构造函数注入.它的工作方式与控制器相同.
public class MultiTenantContext : DbContext
{
private UserContext _userContext;
public MultiTenantContext(DbContextOptions options, UserContext userContext) : base(options)
{
_userContext = userContext;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要确保UserContext在注册实体框架之前注册服务.例如
services.AddScoped<UserContext, UserContext>();
services.AddEntityFrameworkNpgsql()
.AddDbContext<MultiTenantContext>(o =>
o.UseNpgsql(Configuration.GetConnectionString("DbContext")
Run Code Online (Sandbox Code Playgroud)
我假设您尝试Tenant根据 HttpRequest 中的登录用户查找多租户应用程序。你可以做这样的事情
public class UserContext
{
private readonly IHttpContextAccessor _accessor;
public RequestContextAdapter(IHttpContextAccessor accessor)
{
this._accessor = accessor;
}
public string UserID
{
get
{
// you have access to HttpRequest object here
//this._accessor.HttpContext.Request
}
}
}
Run Code Online (Sandbox Code Playgroud)
ASP.NET Core 会自动注入IHttpContextAccessorUserContext
你也必须注册 UserContext
services.AddScoped<UserContext, UserContext>();
Run Code Online (Sandbox Code Playgroud)
然后使用构造函数注入注入UserContext任何你需要的地方
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |