MEF(Managed Extensibility Framework)解决了哪些问题,而现有的IoC/DI容器无法解决这些问题?
我一直在搜索依赖注入并阅读一些文章.但我仍然无法找出MEF和其他IoC之间的区别.所以,我的问题是:在哪种情况下,我更喜欢使用MEF还是IoC容器?
为什么在PRRE(WPF和Silverlight)或桌面应用程序中使用MEF是好的?
而在Web应用程序中,人们使用IoC容器.
那么,决定使用哪种依赖技术的标准是什么?
我浏览过文章http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef.aspx ,但我无法确定任何事情.
structuremap dependency-injection mef ioc-container inversion-of-control
我正在为新的.NET应用程序选择依赖注入框架.这些框架中有许多令人眼花缭乱的框架,包括Ninject,StructureMap,Unity,Castle Windsor,Spring.NET等等.我从不相信任何一个工具绝对比其他工具更好或更差; 它总是取决于背景和约束.
考虑到这一点,任何人都可以提供各种.NET依赖注入框架的优点和缺点,彼此相对吗?哪个更适合小项目,大项目等?对于哪些类型的项目,架构和开发团队,每个项目的工作效果最好还是不太好?那些与其中几个框架合作过的人的任何智慧都会非常有帮助......
MEF 不是 IoC 容器.但它似乎几乎是一个IoC容器.似乎我可以很容易地使MEF表现得像IoC容器(见下面的例子),并且没有太多的缺失使MEF成为一个完整的IoC容器.
MEF中缺少哪些实际功能,StrucureMap,Unity等必须达到标准?
你认为,这个特殊的要求有意义吗?
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.ComponentModel.Composition.Primitives;
using System.Linq;
...
private CompositionContainer container;
public void Configure()
{
container = CompositionHost.Initialize(
new AggregateCatalog(
AssemblySource.Instance.Select(
x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));
var batch = new CompositionBatch();
batch.AddExportedValue<IWindowManager>(new WindowManager());
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
batch.AddExportedValue(container);
container.Compose(batch);
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个非常简单和轻量级的IoC容器,其C#源代码可以包含在我自己的项目中(因此不会进行外部引用).
这样做的原因是我正在编写基础结构,并希望提供单个.dll文件,而不需要任何其他依赖项.
我也不想用IoC组件ILMerge我的组件..
我想过MEF,其他一些建议?
我想知道是否有人可以推荐可以在c#4.0下工作的IOC框架?此外,.Net framework 4.0本身是否支持IOC?