Pet*_*ron 6 structuremap asp.net-mvc routing repository multi-tenant
我正在多租户ASP.NET MVC应用程序中实现StructureMap,以注入我的租户存储库的实例,这些存储库基于ITenantContext接口检索数据.该Tenant问题由下式确定RouteData在一个基本控制器的 OnActionExecuting.
如何告诉StructureMap构造TenantContext(tenantID);tenantID从我的RouteData或某个基本控制器属性派生的位置?
鉴于以下路线:
{tenant}/{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
我的基本控制器Tenant根据{tenant} URL参数检索并存储正确的.使用时Tenant,ITenantContext可以构建具有an的存储库,以仅检索与该租户相关的数据.
根据其他DI问题,可能AbstractFactory是一个解决方案?
不要将租户存储在控制器上,因为您发现注册服务无法使用它.创建一个瘦服务,其唯一责任是确定租户标识符.该服务可以直接访问静态和HttpContext.这个类实际上不需要是可单元测试的 - 它的目的是隔离系统的其余部分,以便其他类是可测试的.
如果您想ITenantContext成为该服务,它可能看起来像:
public class TenantContext : ITenantContext
{
public string GetTenant()
{
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
return routeData.GetRequiredString("tenant");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您的控制器可能只依赖于您的存储库接口,并且您的存储库实现(任何其他关心的服务)都可以依赖ITenantContext.控制器不需要知道租户.
| 归档时间: |
|
| 查看次数: |
1912 次 |
| 最近记录: |