我有一个大型的现有解决方案,使用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项目,以便它可以解决那些实现 –
好的,我看到了,我可能会删除我的答案,可能不是很有帮助。 –