gpt4 book ai didi

c# - 放置 WindsorContainer 并避免循环项目引用的最佳位置在哪里?

转载 作者:行者123 更新时间:2023-11-30 17:16:20 24 4
gpt4 key购买 nike

我有一个具有多层的大型现有解决方案,它使用 CaSTLeWindsor 作为较新层/项目的 DI 框架。我目前正在尝试在以前没有 DI 的层/项目中实现一些新功能,但我不断遇到“循环引用”问题。

给出这样的解决方案......

  • MyCompany.Core - 包括 CaSTLeWindsorConfiguration
  • MyCompany.BusinessLayer - 包括实体和业务逻辑
  • MyCompany.Data - 包括 NHibernate 映射和存储库
  • MyCompany.Emails - 用于补充 BusinessLayer 的现有非 DI 功能
  • MyCompany.Web - 前端/显示网络应用

实际上有相当多的 BusinessLayer 补充项目/层

我无法在 MyCompany.Emails 中添加对 MyCompany.Core 的引用,因为 Core 中的 CaSTLeWindsor 容器引用了 Emails 项目,因此可以使用以下内容配置/映射它...

_windsorContainer.Register(Component.For<IEMailPoolHandler>().ImplementedBy(typeof(EMailPoolHandler)).LifeStyle.PerWebRequest);

但我随后需要使用类似以下的内容来解决电子邮件项目中的这种依赖关系......

private IEMailPoolHandler EMailPoolHandler
{
get
{
return MyCompany.Core.WindsorContainer.Resolve<IEMailPoolHandler>();
}
}

在这里我得到了循环引用错误。基本上我不能引用 Core,因为它引用了电子邮件。

所以,真正的问题是,处理这种情况的最佳方法是什么?我应该把我的 CaSTLeWindsor 容器放在哪里?还是可以拥有多个?例如每个项目一个?

最佳答案

你应该把它放在 .Web 项目中。我相信它是实际应用程序的项目 - 控制生命周期和整体配置 - 应该从容器配置、实例化和解析。

然后,如果可能的话,您应该将 EmailPoolHandler 或 EmailPoolHandlerFactory 注入(inject)(自动或手动构造函数或 setter)到电子邮件项目的类中,而不是从那里访​​问容器。

关于c# - 放置 WindsorContainer 并避免循环项目引用的最佳位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com