我有一個大型的現有解決方案,使用CastleWindsor作爲更新層/項目的DI框架。我目前正試圖在沒有以前的DI的層/項目中實現一些新功能,但我一直在收到「循環引用」問題。哪裏是放置WindsorContainer並避免循環項目參考的最佳地點?
鑑於這樣一個解決方案...
- MyCompany.Core - 包括CastleWindsorConfiguration
- MyCompany.BusinessLayer - 包括實體&業務邏輯
- MyCompany.Data - 包括NHibernate的映射&庫
- MyCompany.Emails - 存在非DI功能以補充BusinessLayer
- MyCompa ny.Web - 網絡應用弗朗端/顯示器
在現實中其實有不少BusinessLayer supplimentry項目/層
我不能MyCompany.Emails因爲CastleWindsor容器添加到MyCompany.Core參考在覈心引用了電子郵件的項目,所以它可以配置/用下面的映射......
_windsorContainer.Register(Component.For<IEMailPoolHandler>().ImplementedBy(typeof(EMailPoolHandler)).LifeStyle.PerWebRequest);
但後來我需要解決的電子郵件項目這種依賴的東西,如下面...
private IEMailPoolHandler EMailPoolHandler
{
get
{
return MyCompany.Core.WindsorContainer.Resolve<IEMailPoolHandler>();
}
}
在這裏我得到了循環引用錯誤。基本上我不能參考核心,因爲它引用了電子郵件。
所以,真正的問題是,處理這種情況的最佳方法是什麼,我應該在哪裏擁有我的CastleWindsor容器?或者可以有多個?例如每個項目中有一個?
是的我可以但我仍然會面臨同樣的問題。容器的配置需要能夠看到Emails項目,因此它可以映射實現,但Emails項目需要引用castle windsor項目,以便它可以解決那些實現 –
好的,我看到了,我可能會刪除我的答案,可能不是很有幫助。 –