gpt4 book ai didi

c# - IoC 容器是否取代了工厂的使用

转载 作者:太空狗 更新时间:2023-10-29 17:45:40 24 4
gpt4 key购买 nike

我刚刚开始使用 IoC 容器,如果这是一个愚蠢的问题,我深表歉意。

我在应用程序中有如下代码

internal static class StaticDataHandlerFactory
{
public static IStaticDataHandler CreateHandler(StaticDataUpdate staticDataUpdate)
{
if (staticDataUpdate.Item is StaticDataUpdateOffice)
{
return new OfficeUpdateHandler();
}

if (staticDataUpdate.Item is StaticDataUpdateEmployee)
{
return new EmployeeUpdateHandler();
}

if (staticDataUpdate.Item == null)
{
throw new NotImplementedException(
string.Format("No static data provided"));
}
else
{
throw new NotImplementedException(
string.Format("Unimplemented static data type of {0}", staticDataUpdate.Item.GetType().FullName));
}
}
}

它基本上是一个简单的工厂,返回处理输入数据的正确策略。

IoC 容器是否允许我消除这样的代码?也就是说:它是否允许我根据输入参数的类型动态选择要加载的具体实现?

还是我偏离了路线?

最佳答案

实际上,虽然可以用控制系统的反转来替换一些代码,但对我来说这不是个好主意。依赖注入(inject)往往最适合系统配置,而不是动态创建对象。换句话说,容器本身是一个巨大的全局变量,因此应该出现在您的大部分代码中。

顺便说一句,代码似乎违反了 Law of Demeter .看起来参数应该是“StaticDataUpdateItem”类型而不是“StaticDataUpdate”。鉴于此,有一个非常有力的论据支持将此代码重写为对 StaticDataUpdateItem 的方法调用。

我大量使用了 IoC,但动态对象的创建仍然最好使用抽象工厂模式来处理。简而言之,如果您不喜欢向项目本身添加方法以生成句柄的想法,代码最好保持原样。

关于c# - IoC 容器是否取代了工厂的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/282406/

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