在我的域中,我擁有少量的「處理器」類,它們擁有大量的業務邏輯。使用默認約定的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