У меня есть интерфейс в моем проекте, который реализует 2 класса:
public interface IService
{
int DoWork();
}
public class Service1:IService
{
public int DoWork()
{
return 1;
}
}
public class Service2:IService
{
public int DoWork()
{
return 2;
}
}
У меня есть обработчик команд, который также зависит от IService
:
public CommandHandler1:ICommandHandler<CommandParameter1>
{
IService _service;
public CommandHandler1(IService service)
{
_service = service
}
public void Handle()
{
//do something
_service.DoWork();
//do something else
}
}
public interface ICommandHandler<TCommandParameter>
where TCommandParameter :ICommandParameter
{
void Handle(TCommandParameter parameter);
}
public interface ICommandParameter
{
}
Я хочу ввести Service1
или Service2
в мой CommandHandler1
на основе выбора пользователя. предположим, что у меня есть enum
, и пользователь может выбрать из него значение:
public enum Services
{
Service_One,
Service_Two
}
Если пользователь выбирает Service_One
, я хочу вставить Service1
в мой обработчик команд, и если он выберет Service_Two
, я хочу добавить Service2
в обработчик команд.
Я знаю, что я могу использовать именованные экземпляры, а затем вызывать ObjectFactory.GetInstance<IService>().Named("Service1")
, например, но
Есть ли способ реализовать это с помощью StructureMap
и предотвратить использование шаблона Service Locator
?