在我的域中,我拥有少量的“处理器”类,它们拥有大量的业务逻辑。使用默认约定的StructureMap,我将注入库注入这些类的各种IO(数据库,文件系统等)。例如:StructureMap - 将依赖注入到基类中?
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,它采用零参数。
有没有办法做我想在这里做的事情?也就是说,为了让其他类可以使用的基类中注入通用的依赖关系,而不必将注入写入每个类中?
我想这并没有真正的危害,我只是想整理一些东西。使代码更清洁一点。 现在的折衷是在每个类的构造函数中包含公共依赖项,或者手动实例化基类中的依赖项(调用ObjectFactory.GetInstance()而不是期待构造函数参数)。我想现在是抽出我的IoC容器的时候了,让第二个选项更舒服一点:) – David 2010-05-27 20:00:18
Nooooo ...那将会是一条糟糕的道路。仅仅因为您对构造函数参数数量感到不舒服而强制使用服务位置?请不要。如果你有一些常见的依赖关系(不只是一个),那么你可能有一些应该被分解到另一个服务中的通用功能。该服务将采用多个依赖项并执行需要它们的工作。然后您将该服务注入到其他构造函数中。这就是“支持构成而不是继承”的含义。 – 2010-05-28 12:57:01