Я пытаюсь решить этот случай в нашем коде, где мне нужно разрешить зависимость во время выполнения на основе определенного условия, например, если существует определенное значение строки запроса.Условное разрешение зависимостей в ASP.NET MVC с использованием windsor замка
Позвольте сказать, что у меня есть контроллер AuthenticationController, и у меня есть служба аутентификации, имеющая два варианта.
public class AuthenticationController
{
private readonly IAuthenticationService authenticationService;
public AuthenticationController(IAuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
public ActionResult LogOn(LogOnModel model)
{
var isAuthenticated = authenticationService.AuthenticatUser(model.UserName, model.Password);
}
}
public interface IAuthenticationService
{
bool AuthenticatUser(string userName, string password);
}
public class ProviderBasedAuthenticationService : IAuthenticationService
{
public bool AuthenticatUser(string userName, string password)
{
// Authentication using provider;
return true;
}
}
public class ThirdPartyAuthenticationService : IAuthenticationService
{
public bool AuthenticatUser(string userName, string password)
{
// Authentication using third party;
return true;
}
}
Я внедрил IoC и DI с помощью виндзора замка.
Я регистрирую службу ProviderBasedAuthenticationService и ThirdPartyAuthenticationService для IAuthenticationService в контейнере замка.
В настоящее время замок разрешает объект первого зарегистрированного типа при разрешении IAuthenticationService.
Я хочу разрешить соответствующий тип IAuthenticationService в зависимости от определенного значения, входящего как часть строки запроса в URL-адрес запроса или данные маршрута.
Я обнаружил, что это можно как-то сделать с помощью Microsoft UnityContainer, но я не уверен, как этого добиться в Castle Windsor. (Я не могу изменить свой контейнер сейчас в Microsoft UnityContainer).
Было бы очень признательно, если кто-нибудь может мне помочь в этом или обеспечить какое-то направление вокруг этого.
Спасибо и уважением, Четан Ranpariya
Hi qujk, вы прибил его. Я как-то не мог думать о наличии отдельного метода фабрики, но я пытался это сделать, используя встроенный динамический метод. Подход, который вы предоставляете, должен непременно работать. Спасибо. - Четан Ранпария –