在我的域中,我有一些“处理器”类,它们拥有大部分业务逻辑.使用带有默认约定的StructureMap,我将存储库注入其各种IO(数据库,文件系统等)的类中.例如: public interface IHelloWorldProcessor{ s
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工具将负责它 – 这是什么危害?