Какова лучшая практика для реализации мультитенантности в ASP.NET MVC с использованием Castle Windsor? - PullRequest
1 голос
/ 01 марта 2011

У меня есть сервис с двумя различными реализациями, и я хотел бы внедрить его в конструктор контроллеров, в зависимости от критерия (на данный момент критерием является простое значение, сохраняемое в сеансе).

Вот чтоЯ получил сейчас ...

Сервисный интерфейс:

public interface IService
{
    string GetSampleText();
}

Реализация № 1:

public class FirstService : IService
{
    string GetSampleText()
    {
        return "First Service";
    }
}

Реализация № 2:

public class SecondService : IService
{
    string GetSampleText()
    {
        return "Second Service";
    }
}

Регистрация в классе установщика Windsor:

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

container.Kernel.AddHandlerSelector(new ServiceHandlerSelector());

Я реализовал IHandlerSelector:

public class ServiceHandlerSelector : IHandlerSelector { ... }

В методе HasOpinionAbout этой реализации IHandlerSelector я могу решить, какой обработчик будет выбран в SelectHandlerметод (зависит от значения из сеанса).

Тогда инжектор конструктора работает нормально на контроллерах:

public MyController(IService service) { ... }

Итак, я получил рабочее решение, но я не уверен, если онолучший способ сделать это.

Мнения?Предложения?

Большое спасибо.

1 Ответ

6 голосов
/ 01 марта 2011

Вы на правильном пути с селекторами обработчиков.Вот несколько хороших статей об их использовании для мультитенантности, вы можете использовать их для справки:

...