【问题标题】:Should I use Unity (is it still alive)?我应该使用 Unity(它还活着吗)?
【发布时间】:2011-04-19 12:10:38
【问题描述】:

我在 2 年前使用过 Unity,我打算再次使用它。

但是,当你用谷歌搜索它时,你会看到微软的网站,上面说这些页面不再维护,另一个大热门是 codeplex.com。

然而,在 codeplex,自 2010 年开始以来就没有发布过,他们承诺在 5 月/6 月上映电影(我假设他们的意思是 2010 年),但现在还没有。

所以我想知道该产品是否仍然存在,还是 MEF 是新的摇滚小子?

ps(有点离题)

不知道我是不是唯一一个,但我似乎从来没有很好地了解 codeplex 项目的成熟度/状态/“他们明年会存在”等,以及大部分时间的文档马马虎虎

【问题讨论】:

    标签: c# dependency-injection unity-container


    【解决方案1】:

    几点:

    1. MEF 的目标不是与 Unity 竞争产品(因此在选择它作为 IoC 的主要目的时请记住这一点)。 Microsoft 员工 Glenn Block 在 stackoverflow 上提出了 here

      我们的目标不是让 MEF 成为 通用 IoC。最好的思考方式 关于 MEF 的 IoC 方面是 实施细节。我们使用 IoC 作为 模式,因为它是一个很好的方式 解决我们正在寻找的问题 解决... MEF 专注于可扩展性。

    2. P&P forum for Unity上也有类似的问题(上个月),答案如下:

      Unity 活得很好,而且有一个 团队现在正在研究它(我们是 构建 Unity 拦截支持 Silverlight 作为 Silverlight 集成包)。查看 出最新的一滴,你会看到 在那里更新。

      此外,还有很多项目使用 今天的 Unity,包括 Microsoft 产品。 Unity 采用的脉搏 非常健康 - 超过 10 万次下载 Unity 2.0 独立版等 通过 EntLib。订阅者数量 到stackoverflow上的Unity论坛是 与 MEF 论坛相同。

    3. 我强烈建议您将您选择的 IoC 容器抽象到一个薄包装器中,以帮助您避免任何给定容器过时的风险。如果需要,它将更容易切换到不同的容器。 Brownfield Application Development in .NET的第251页也提倡这种做法,示例代码如下(为了避免侵犯版权,我稍作改动):

      public class Resolve
      {
          public static T TypeOf<T>()
          {
          //…
          }
      }
      
      public class SomeClass
      {
          public void DoingSomething( )
          {
              var someDependency = Resolve.TypeOf<ISomeDependency>();
              //...
          }
      }
      

    【讨论】:

    • 第 3 点 +1 ......关于 #2,用于 SL 的 Unity 拦截已经“开发”了 3 年。另外,您应该记住,DI 容器的理想角色是您不需要编写像 #3 这样的代码。您的代码中应该只有一个位置实际调用容器上的 Resolve。依赖项应该自动注入其他地方....
    • Silverlight 拦截已经积压了一段时间,但尚未开发。大约两个月前,我完成了第一项工作。
    【解决方案2】:

    MEF(托管可扩展性框架)和 Unity 目前在 Microsoft 的依赖注入产品方面处于竞争地位。至于拦截和 AOP(面向方面​​的编程),MEF 还没有真正努力解决这个问题。

    历史告诉我们,微软并没有真正很好地管理其竞争/重叠的团队项目,结果是经常缺乏基本功能的半生不熟的实现记录(看看 LINQ to SQL 和实体框架的一个明显例子 - 3 年后,EF 仍然缺乏 LINQ to SQL 开箱即用的非常基本的功能。

    我个人会选择一个更成熟、维护得更好的 DI 框架(大多数具有比 MEF 和 Unity 组合更多的功能)。我喜欢温莎城堡。 NInject、StructureMap 等似乎也有良好的业绩记录。

    【讨论】:

    • 温莎城堡+1。我不确定其他容器,但 Windsor 生成的错误消息非常清晰,使学习曲线非常平滑。
    • 同意,我一直认为很难确定(就像我在这里的 Unity 问题中一样)一个产品是否即将过期,是否会进化。
    【解决方案3】:

    我认为 MEF 是新的摇滚小子。而且很甜。它似乎有很好的记录,看起来它会存在一段时间。据我所见,它也比 Unity 更容易。

    【讨论】:

      【解决方案4】:

      是的,Unity 仍然存在!我也是。如果我没记错的话,microsoft 的模式和实践和 unity 2.0 一样吗?

      【讨论】:

        猜你喜欢
        • 2019-06-11
        • 2023-03-22
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-09
        相关资源
        最近更新 更多