В моем домене у меня есть горстка классов "процессора", которые содержат объем бизнес-логики. Используя StructureMap с конвенциями по умолчанию, я ввожу репозитории в те классы для их различного IO (базы данных, файловая система, и т.д.). Например:
public interface IHelloWorldProcessor
{
string HelloWorld();
}
public class HelloWorldProcessor : IHelloWorldProcessor
{
private IDBRepository _dbRepository;
public HelloWorldProcessor(IDBRepository dbRepository)
{
_dbRepository = dbrepository;
}
public string HelloWorld(){ return _dbRepository.GetHelloWorld(); }
}
Теперь, существуют некоторые репозитории, что я хотел бы быть доступным всем процессорам, таким образом, я сделал базовый класс как это:
public class BaseProcessor
{
protected ICommonRepository _commonRepository;
public BaseProcessor(ICommonRepository commonRepository)
{
_commonRepository = commonRepository;
}
}
Но когда мои другие процессоры наследовались ему, я получаю ошибку компилятора на каждом высказывании, что нет никакого конструктора для BaseProcessor, который берет нулевые аргументы.
Существует ли способ сделать то, что я пытаюсь сделать здесь? Таким образом, чтобы ввести общие зависимости в базовый класс, который мои другие классы могут использовать, не имея необходимость писать инжекции в каждого?
Нет. Это требование языка C #, а не ограничение StructureMap. Производный класс должен передавать значения своим базовым конструкторам. Если вы используете базовый класс исключительно для внедрения общей службы, вы ничего не получите. Просто поместите общий сервис в каждый класс, который в нем нуждается - ваш инструмент IoC позаботится об этом - какой вред?