Asp.net mvc 使用Castle Windsor在ASP.NET MVC中实现多租户的最佳实践是什么?

Asp.net mvc 使用Castle Windsor在ASP.NET MVC中实现多租户的最佳实践是什么?,asp.net-mvc,castle-windsor,Asp.net Mvc,Castle Windsor,我有一个具有两种不同实现的服务,我想将其注入控制器构造函数,这取决于一个标准(目前标准是存储在会话中的一个简单值) 这是我现在得到的 服务接口: public interface IService { string GetSampleText(); } 实施#1: 实施#2: 在温莎安装程序类别中注册: container.Register(AllTypes .FromAssemblyInDirectory(new AssemblyFilter(HttpRuntime.BinDir

我有一个具有两种不同实现的服务,我想将其注入控制器构造函数,这取决于一个标准(目前标准是存储在会话中的一个简单值)

这是我现在得到的

服务接口:

public interface IService
{
    string GetSampleText();
}
实施#1:

实施#2:

在温莎安装程序类别中注册:

container.Register(AllTypes
  .FromAssemblyInDirectory(new AssemblyFilter(HttpRuntime.BinDirectory))
  .BasedOn<IService>()
  .WithService.FromInterface()
  .Configure(c => c.LifeStyle.Transient));

container.Kernel.AddHandlerSelector(new ServiceHandlerSelector());
在这个IHandlerSelector实现的HasOpinionAbout方法中,我可以决定在SelectHandler方法中选择哪个处理程序(取决于会话中的值)

然后构造函数注入在控制器上正常工作:

public MyController(IService service) { ... }
所以我得到了一个有效的解决方案,但我不确定这是否是最好的方法

意见?建议


非常感谢。

您使用处理程序选择器的方法是正确的。以下是一些关于将它们用于多租户的好文章,您可以参考它们:


使用处理程序选择器,您的选择是正确的。以下是一些关于将它们用于多租户的好文章,您可以参考它们:

container.Register(AllTypes
  .FromAssemblyInDirectory(new AssemblyFilter(HttpRuntime.BinDirectory))
  .BasedOn<IService>()
  .WithService.FromInterface()
  .Configure(c => c.LifeStyle.Transient));

container.Kernel.AddHandlerSelector(new ServiceHandlerSelector());
public class ServiceHandlerSelector : IHandlerSelector { ... }
public MyController(IService service) { ... }