我使用Autoface創建了一個新的MVC4網站,該網站具有公共消費者網站以及用於管理面向消費者的網站的管理區域。管理網站將位於不同的區域使用與面向消費者的網站相同的服務,但不具有某些自定義品牌特徵。Autofac每個區域的依賴關係
我遵循了其他地方給出的有關ViewDataFactory的建議,該ViewDataFactory爲視圖提供了一組共享數據。我的目標是取決於你在什麼區,以提供不同的ViewDataFactory。
因此,舉例來說,這裏是一個實現IViewDataFactory
builder.RegisterType<SelfServiceViewDataFactory>().As<IViewDataFactory>();
這給了我一個的ViewFactory將其注入到我的所有控制器的服務。但是我想要到acheive是這樣的(沒有功能代碼):
builder.RegisterType<ViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase1);
builder.RegisterType<DifferentViewDataFactory>().As<IViewDataFactory>().ForType(ControllerBase2);
在控制器類型或MVC面積將確定哪些服務得到解決。
編輯
爲了澄清我的帖子有兩個問題:
- 是否有Autofac的方式說「只爲X型的類,Y型的服務將提供實例Z「?
- 有沒有辦法改變Autofac行爲的基礎上使用該組件的區域?
從我一直在閱讀的所有內容來看,#1的答案似乎是「否」,除非您有一個參數用於檢查要提供哪個組件。我知道Ninject可以提供基於命名空間的依賴關係,所以其他框架似乎可以處理這種情況。似乎解決方案是提供參數或定義兩種不同的服務。
我還沒有真正看過Autofac和MVC領域的很多討論,所以我猜#2也不可能沒有自定義解決方案。謝謝!
Essentiall y,你將有一個模塊化設計,每個區域有一個單獨的容器參考,對嗎? –
是的。有沒有辦法爲每個區域設置一個Autofac容器? – AlexT
如果他們正在做重大不同的事情,你真的想將這兩個具體類填入'IViewDataFactory'?怎麼樣'ControllerBase1'依賴ViewDataFactory,同樣'ControllerBase2'依賴'DifferentViewDataFactory' – wal