我们有一个多租户ASP.NET MVC应用程序,该应用程序为多个客户端托管预订引擎。这些客户端中的每个客户端都有多个程序包,这些程序包可能会影响Unity容器的配置。我们将为每个请求创建一个子容器,并根据通过路由传递的客户端和程序包参数注册不同的接口实现。
当前,我们通过执行以下操作来完成此任务:
这是可行的,但确实很笨拙,我最终认为这将是不可持续的。我正在寻找更好的解决方案。
目前,我们一直停留在.NET 4.0上,直到我们打包了一些旧的东西,所以我专门针对Unity 2。
我尝试创建一个自定义IDependencyResolver来创建子容器,并根据将参数存储在Session或HttpContext项目中的路由参数来注册依赖项,但遇到了空HttpContext问题。还有其他方法可以将注册基于路由并将依赖项注入到控制器构造函数中吗?
最终,我还将需要Web API的解决方案。
编辑:示例
public interface IRateService { ... }
public class RemoteRateService : IRateService { ... }
public class LocalRateService : IRateService { ... }
public class CustomDependencyResolver : IDependencyResolver
{
public object GetService(Type serviceType)
{
if(ChildContainer == null)
{
ChildContainer = _container.CreateChildContainer();
var routeData = HttpContext.Current.Request.RequestContext.RouteData.Values;
if(routeData["client"] == "ClientA")
ChildContainer.RegisterType<IRateService, RemoteRateService>();
else
ChildContainer.RegisterType<IRateService, LocalRateService>();
}
return ChildContainer.Resolve(serviceType);
}
}
public class RateController : Controller
{
private IRateService …Run Code Online (Sandbox Code Playgroud)