Dav*_*vid 5 structuremap inheritance constructor
在我的领域中,我有一些“处理器”类,它们包含大部分业务逻辑。使用带有默认约定的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(); }
}
Run Code Online (Sandbox Code Playgroud)
现在,有一些存储库可供所有处理器使用,因此我做了一个基类,如下所示:
public class BaseProcessor
{
protected ICommonRepository _commonRepository;
public BaseProcessor(ICommonRepository commonRepository)
{
_commonRepository = commonRepository;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我的其他处理器继承自该处理器时,每个处理器都会收到一个编译器错误,说没有BaseProcessor的构造函数,该构造函数采用零参数。
有没有办法做我想在这里做的事情?就是说,是否要将公共依赖项注入到我的其他类可以使用的基类中,而不必将注入内容写入每个基类中?
不。这是 C# 语言的要求,而不是 StructureMap 的限制。派生类必须将值传递给其基构造函数。如果您仅使用基类来处理公共服务的注入,那么您将不会获得任何东西。只需将公共服务放在每个需要它的类上 - 你的 IoC 工具就会处理它 - 有什么害处?