У нас есть интерфейс, который реализуется двумя классами:
public interface ISomething { void DoSomething(); }
public class Something1 : ISomething { public void DoSomething() {...} }
public class Something2 : ISomething { public void DoSomething() {...} }
Эти интерфейсы используются двумя разными модулями.Module1
нужны Something1
и Module2
нужны Something2
:
public class Module1(ISomething something) { something.DoSomething(); }
public class Module2(ISomething something) { something.DoSomething(); }
Мы настроили это в реестре:
For<Module1>().Use<Module1>().Ctor<ISomething>().Is<Something1>();
For<Module2>().Use<Module2>().Ctor<ISomething>().Is<Something2>();
Однако, когда он запускается, мы получаемследующая ошибка:
Экземпляр по умолчанию не зарегистрирован и не может быть автоматически определен для типа 'ISomething'
Если мы создаем и регистрируем класс по умолчанию, тогда он работает имы не получаем вышеуказанную ошибку:
public class DefaultSomething : ISomething { public void DoSomething() {...} }
For<ISomething>().Use<DefaultSomething>();
Все варианты использования интерфейса настраиваются в реестре, и мы не хотим указывать значение по умолчанию, но кажется, что вы должны сообщить StructureMap, чтоиспользовать, даже если это никогда не нужно использовать.Можно ли не указывать экземпляр по умолчанию?
Спасибо:)