我有一个包含多个层的大型现有解决方案,它使用CastleWindsor作为新框架/项目的DI框架。我目前正在尝试在没有先前DI的层/项目中实现一些新功能,但我不断遇到“循环引用”问题。
给出这样的解决方案......
实际上,实际上有很多BusinessLayer supplimentry项目/图层
我无法在MyCompany.Emails中添加对MyCompany.Core的引用,因为Core中的CastleWindsor容器引用了Emails项目,因此可以使用以下内容配置/映射...
_windsorContainer.Register(Component.For<IEMailPoolHandler>().ImplementedBy(typeof(EMailPoolHandler)).LifeStyle.PerWebRequest);
但是我需要在Emails项目中解决这种依赖关系,如下所示......
private IEMailPoolHandler EMailPoolHandler
{
get
{
return MyCompany.Core.WindsorContainer.Resolve<IEMailPoolHandler>();
}
}
在这里我得到循环引用错误。基本上我不能引用Core,因为它引用了电子邮件。
所以,问题的确是,处理这种情况的最佳方法是什么?我应该在哪里使用CastleWindsor容器?或者可以拥有多个?例如,每个项目中有一个?
答案 0 :(得分:2)
你应该把它放在.Web项目中。我相信这是项目的实际应用程序 - 控制生命周期和整体配置 - 应该从容器配置,实例化和解析。
然后你应该 - 如果可能的话 - 将EmailPoolHandler或EmailPoolHandlerFactory注入(ctor或setter,自动或手动)到Email项目的类中,而不是从那里访问容器。
答案 1 :(得分:0)
你能不能在它自己的项目中拥有它,然后让其他一切参考它?