我有3層如何跨多個層
甲
乙
Ç
在層C,我有接口IRepository溶液要求在MEF的特定部分它有兩個實現,RepositoryX和RepositoryY。
在B層,我有接口IController和在層A我有一個名爲Foo的類。現在我知道我可以通過使用契約名稱或導出元數據來控制IRepository的哪個實現被注入到依賴項中。
在Controller的實現中,我可以說我需要RepositoryX或RepositoryY,並且工作正常。
在A層的Foo類中,我對IController進行了依賴注入。我如何控制Foo類的IController將實現哪個IRepository?
我要尋找類似:
class Foo
{
[Import("RepositoryX")]
public IController MyController { get; set; }
這將注入其擁有本身的控制器的進口財產注入型RepositoryX的存儲庫的一個IController。
有沒有辦法做到這一點,而不必定義2個控制器除了哪個類型的存儲庫是相同的?
這個解決方案的問題是它破壞了我的圖層的封裝。爲此,我必須在最高層A中引用數據層C中定義的接口。我想如果遵循依賴倒置原則,我的接口應該在B層,但這不是我的情況。 – Gilles