加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

设计模式 – 害怕使用依赖注入框架

发布时间:2020-12-14 04:53:47 所属栏目:百科 来源:网络整理
导读:我一直在阅读依赖注入框架.我真的爱上了将问题分开并让对象做核心工作的想法 – 这无疑是一个优秀而长久的设计原则! 然而,我对DI框架的阅读越多,我就越担心: 1)他们“自动”解决依赖关系的方式 2)关于配置文件中引入的极端复杂性 在第2点,我看到我的客户花
我一直在阅读依赖注入框架.我真的爱上了将问题分开并让对象做核心工作的想法 – 这无疑是一个优秀而长久的设计原则!

然而,我对DI框架的阅读越多,我就越担心:
1)他们“自动”解决依赖关系的方式
2)关于配置文件中引入的极端复杂性

在第2点,我看到我的客户花费数百万美元来培训产品上的人,其中重要的部分是如何“不”触摸配置文件.管理员现在担心这些配置文件.

不过,我看到另一种称为服务定位器的模式,我可以很好地在应用程序开始时组装我想要的所有“全局”服务(可能是应用程序主机或应用程序上下文或其他).使这个服务定位器在全球范围内可用,瞧!

但是,当我根据某些标准(已知谁?)需要多种类型的“全局”服务时,我发现使用服务定位器方法时灵活性会降低!

所以,在这里我比以前更加困惑于采取哪个方向.虽然我非常喜欢设计原则,但现有框架的复杂性让我失望!

我的担忧是真的吗?别人都有同感吗?如果是这样,对于如此大规模压倒性的“框架”,还有什么好的选择吗?

解决方法

正如Nate所说,“魔术”是可选的;如果需要,您可以手动配置所有内容.

我最初(或永远!)避免配置文件,并在代码中配置容器.这往往更容易阅读和维护.大多数情况下,您不需要对配置进行即时更改.客户无法触摸配置文件,因为它们不存在.

服务定位器有缺点;例如,他们倾向于将您的类耦合到定位器类/框架.一个好的DI框架可以让你使用Plain Old Objects;您的项目中可能只有一个实际使用DI / IoC框架的类.

StructureMap和Unity都非常简单;试一试.从小处开始.

这是Unity的一个非常简单的例子(包括内联配置):

using Microsoft.Practices.Unity;

static void Main()
{
    using (IUnityContainer container = new UnityContainer())
    {
        container.RegisterType<IRobot,MrRoboto>();

        Console.WriteLine("Asking Unity container to give us a Model...");

        Model model = container.Resolve<Model>();
        model.MoveRobot();
    }
}

// class Model

public Model(IRobot robot)
{
    // Unity will hand the constructor an instance of MrRoboto!
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读