gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中使用 StructureMap 注入(inject) Multi-Tenancy 存储库

转载 作者:行者123 更新时间:2023-12-04 14:35:59 26 4
gpt4 key购买 nike

我在 Multi-Tenancy ASP.NET MVC 应用程序中实现 StructureMap 以注入(inject)我的租户实例 存储库 根据 ITenantContext 检索数据界面。 Tenant有问题的由 RouteData 确定在基本 Controller 的 OnActionExecuting .

我如何告诉 StructureMap 构造 TenantContext(tenantID);其中tenantID 来自我的RouteData或一些基本 Controller 属性?

基本 Controller

给定以下路线:

{tenant}/{controller}/{action}/{id}

我的基本 Controller 检索并存储正确的 Tenant基于 {tenant} URL 参数。使用 Tenant ,具有 ITenantContext 的存储库可以构造为仅检索与该租户相关的数据。

根据其他 DI 问题,可以 AbstractFactory是一个解决方案?

最佳答案

不要将租户存储在 Controller 上,因为正如您所发现的那样,注入(inject)的服务将无法使用它。创建一个瘦服务,其唯一职责是确定租户标识符。该服务可以直接访问静态和 HttpContext。这个类实际上不需要是可单元测试的——它的目的是隔离系统的其余部分,以便其他类是可测试的。

如果你想要ITenantContext作为该服务,它可能看起来像:

public class TenantContext : ITenantContext
{
public string GetTenant()
{
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));
return routeData.GetRequiredString("tenant");
}
}

现在您的 Controller 可以只依赖于您的存储库接口(interface),并且您的存储库实现(任何其他关心的服务)可以依赖于 ITenantContext . Controller 不需要了解租户。

关于asp.net-mvc - 在 ASP.NET MVC 中使用 StructureMap 注入(inject) Multi-Tenancy 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2749948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com