StructureMap - Введение зависимости в базовый класс?

В моем домене у меня есть горстка классов "процессора", которые содержат объем бизнес-логики. Используя 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, который берет нулевые аргументы.

Существует ли способ сделать то, что я пытаюсь сделать здесь? Таким образом, чтобы ввести общие зависимости в базовый класс, который мои другие классы могут использовать, не имея необходимость писать инжекции в каждого?

5
задан David 27 May 2010 в 15:56
поделиться

1 ответ

Нет. Это требование языка C #, а не ограничение StructureMap. Производный класс должен передавать значения своим базовым конструкторам. Если вы используете базовый класс исключительно для внедрения общей службы, вы ничего не получите. Просто поместите общий сервис в каждый класс, который в нем нуждается - ваш инструмент IoC позаботится об этом - какой вред?

4
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: