代码之家  ›  专栏  ›  技术社区  ›  David

结构映射-将依赖项插入到基类中?

  •  4
  • David  · 技术社区  · 15 年前

    在我的领域中,我有一些“处理器”类,它们承载了大部分业务逻辑。使用带有默认约定的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的构造函数接受零个参数。

    有没有办法做我想做的事?也就是说,要将公共依赖项注入到我的其他类可以使用的基类中,而不必将注入写入每个基类中?

    2 回复  |  直到 13 年前
        1
  •  4
  •   Joshua Flanagan    15 年前

    不。这是C语言要求,而不是结构图限制。派生类必须将值传递给其基构造函数。如果您仅仅使用基类来处理注入公共服务,那么您将得不到任何东西。只要把共同的服务放在每一个需要它的班级上-你的国际奥委会工具会处理它-有什么害处?

        2
  •  2
  •   Bob    13 年前

    您需要的是属性注入。对于基类来说,注入依赖项的公共属性是可以的,因为您永远不会将派生类用作基类的具体实例-您将(应该)始终使用派生类的接口。

    这里的答案是为了避免构造函数注入中的明显弱点,并在基类上使用属性注入。