Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该使用Unity(它还活着吗)?_C#_Dependency Injection_Unity Container - Fatal编程技术网

C# 我应该使用Unity(它还活着吗)?

C# 我应该使用Unity(它还活着吗)?,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,2年前我曾与Unity合作,并计划再次使用它 但是,当你用谷歌搜索它时,你会看到微软的网站,上面说这些页面不再被维护,另一个大热门是codeplex.com 然而,在codeplex,自2010年开始就没有发行过,他们承诺在5月/6月上映电影(我想他们是指2010年),但现在还没有 所以我想知道这个产品是还活着,还是MEF是新来的摇滚小子 ps(主题之外的位) 我不知道我是否是唯一一个,但我似乎从来没有很好地了解codeplex项目的成熟度/状态/明年是否会存在等,而且大部分时间的文档都很简单,

2年前我曾与Unity合作,并计划再次使用它

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

然而,在codeplex,自2010年开始就没有发行过,他们承诺在5月/6月上映电影(我想他们是指2010年),但现在还没有

所以我想知道这个产品是还活着,还是MEF是新来的摇滚小子

ps(主题之外的位)


我不知道我是否是唯一一个,但我似乎从来没有很好地了解codeplex项目的成熟度/状态/明年是否会存在等,而且大部分时间的文档都很简单,我认为MEF是最棒的新人。而且很甜。它似乎有很好的文档记录,看起来它会存在一段时间。据我所见,它也比Unity容易。

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

历史告诉我们,微软并没有很好地管理其相互竞争/重叠的团队项目,其结果是往往缺乏基本功能的半生不熟的实现(看看LINQtoSQL和实体框架,这是一个明显的例子——3年后,EF仍然缺乏LINQtoSQL现成的非常基本的功能)


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

是的,Unity仍然存在!mef也是。如果我没有弄错的话,microsoft模式和实践与Unity 2.0相同?

有几点:

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

    我们的目标不是让MEF成为一个 全能的国际奥委会。最好的思考方式 关于国际奥委会方面的MEF是一个 实施细节。我们使用IoC作为 因为这是一个很好的方式 解决我们期待的问题 MEF专注于可扩展性

  • 上还有一个类似的问题(从上个月开始),答案如下:

    团结是充满活力的,有一个 团队正在进行此项工作(我们正在 建立统一拦截支持 对于Silverlight,作为 Silverlight集成包)。检查 最新的一滴,你会看到的 更新那里

    此外,还有许多项目使用 今天的团结,包括微软 产品。统一采用的脉搏 非常健康-超过10万次下载 Unity 2.0独立版及更多版本 通过EntLib。订阅服务器的数量 关于stackoverflow的统一论坛是 与MEF论坛相同

  • 我强烈建议您将您选择的IoC容器抽象到一个薄包装后,以帮助您避免任何给定容器过时的风险。如果需要,这将使您更容易切换到其他容器。第251页也提倡这种方法,示例代码如下ows(为了避免侵犯版权,我做了一些修改):

    公共类解析
    {
    公共静态T类型()
    {
    //…
    }
    }
    公共类
    {
    公开做某事()
    {
    var someDependency=Resolve.TypeOf();
    //...
    }
    }
    

  • +1对于Castle Windsor。我不确定其他容器,但Windsor生成的错误消息非常清晰,使学习曲线非常平滑。同意,我一直认为很难找到(就像我这里的统一问题)无论产品是否即将过期,都将演变为第3点的tc.+1……关于#2,针对SL的Unity拦截一直处于“开发中”3年。此外,您应该记住,DI容器的理想角色是不需要编写像#3这样的代码。代码中应该只有一个位置实际调用容器上的Resolve。依赖项应该自动注入到其他位置……Silverlight拦截在积压工作中已经有一段时间了,但它是因为还没有开发。大约两个月前我做了第一件工作。
    public class Resolve
    {
        public static T TypeOf<T>()
        {
        //…
        }
    }
    
    public class SomeClass
    {
        public void DoingSomething( )
        {
            var someDependency = Resolve.TypeOf<ISomeDependency>();
            //...
        }
    }