gpt4 book ai didi

structuremap - 重构 ObjectFactory.GetInstance 的大型应用程序以使用嵌套容器

转载 作者:行者123 更新时间:2023-12-01 05:07:20 25 4
gpt4 key购买 nike

我有一个大型应用程序,它使用使用 ObjectFactory.GetInstance() 获取实例的旧方法。

现在我想将应用程序转移到使用构造函数注入(inject)注入(inject)依赖项的更正确方法。但是,一次转换所有代码几乎是不可能的(一些静态类使用 ObjectFactory.GetInstance,其他服务没有具有所有依赖项的构造函数,...)。

我想知道是否有一种方法可以用使用当前嵌套容器的替换来替换 ObjectFactory.GetInstance 调用,例如用 Ioc.GetCurrentNestedContainer().GetInstance 替换所有 ObjectFactory.GetInstance,以使其快速运行。
但是我如何实现 Ioc.GetCurrentNestedContainer 以返回当前事件的嵌套容器?

我无法在所有这些类中注入(inject) IContainer(有些是静态的或没有对应的
构造函数),所以他们不能使用构造函数注入(inject)(还)。

在此应用程序中,DI 用于 MVC、WCF 和基于任务的场景。

最佳答案

虽然我不能谈论 WCF 和基于任务的场景,但我可以提供我对 MVC 的建议(我自己花时间寻找类似问题的选项。

The solution to I've come across and ultimately settled for在看到 StructureMap 的创建者的建议后,在每个请求上创建一个 HttpContext 绑定(bind)的嵌套容器并存储在 HttpContext.Items 中。 .从这里您可以通过转换存储在 HttpContext.Items 中的实例来引用容器。到 IContainer .

事实上,这与使用的解决方案相同within the StructureMap.MVC5 nuget package .

考虑到这个解决方案,没有什么可以阻止您更换 ObjectFactory与您自己的工厂一起从 HttpContext.Items 返回嵌套容器.

更新:

如果 HttpContext 对您不可用,那么我知道的唯一其他选择是创建您自己的对象工厂实例,该实例创建一个新容器并将其存储在 Lazy<T> 中。 as suggested here以及 StructureMap 的 Google 群组页面 here .

我打算建议在 StructureMap Google Groups 上发布这个问题,但我看到你已经这样做了。作为一个狂热的 StructureMap 用户,我很想看看你的帖子中还有什么其他建议,所以我会密切关注。

关于structuremap - 重构 ObjectFactory.GetInstance 的大型应用程序以使用嵌套容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533390/

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