繁体   English   中英

C#MEF不能做类型绑定吗?

[英]C# MEF cannot do type binding?

我想通过类型绑定到对象instanced。

我现在要做的是:

var catalog = new AssemblyCatalog(typeof(...).Assembly);

var container = new CompositionContainer(catalog); 
    var batch = new CompositionBatch(); 
var mySamurai = new Samurai(); 
batch.AddPart(mySamurai);//I would prefer the type not an object...    
    container.Compose(batch);
mySamurai.Attack();

这是有效的但我想做的事情如下:

var catalog = new AssemblyCatalog(typeof(...).Assembly);
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();

batch.AddPart(typeof(Samurai));//HERE container.Compose(batch);        
var mySamurai = new Samurai();
mySamurai.Attack(); 

这可能与MEF有关吗?

如果我正确理解你,就没有办法做到这一点。 当它看到fakeEntity2时,MEF无法做任何事情,因为MEF从未真正“看到”它。 您必须像使用fakeEntity一样将其传递给容器,或者您必须导出FakeEntity类,并以某种方式从容器中提取它(即使用GetExportedValue)。

通常,您使用属性在MEF中设置导出和导入,而不是像Ninject那样在代码中配置它们。

即使MEF没有开箱即用的“代码配置”,您仍然可以使用MEFContrib项目与工厂导出提供程序一起执行此操作。

更新 :在MEF2-Preview3中添加了无属性注册

此外, 马克·西曼Mark Seemann)通过巧妙利用房地产出口和仿制药,在不使用新的无属性登记的情况下发表了关于“登记”类型的方法。

我对MEF知之甚少,但你的情况看起来像Ninject,Unity,StuctureMap,Castle Windsor等等IoC容器会擅长。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM