0
我正在调查MEF 2(Microsoft.Composition),并希望将其与我现有的代码库相集成。如何在MEF 2中导出工厂和/或其方法?
我目前的代码库有一个IFactory
接口用一个简单的签名:
public interface IFactory<T>
{
T Create();
}
我想注册我的工厂,这样,如果我在工厂做一个出口,它注册为Func<T>
为工厂的输出为T
。因此,像这样:
[Export]
public class Factory : IFactory<Class>
{
public Class Create() => new Class();
}
会与下面的代码返回一个新Class
实例,并为Create
方法的引用(作为Func<Class>
代表):
using (var container = new ContainerConfiguration()
// ... magic missing here.
.CreateContainer())
{
var instance = container.GetExport<Class>(); // instance is created from the Factory.Create above.
var factory = container.GetExport<Func<Class>>(); // this is a reference to the Factory.Create delegate defined above.
}
我确实看到this question,但它似乎并不适用于MEF 2.现在各种事情都不一样,但似乎更轻量化/简化(如广告所示!)。
是否有可能实现我期待用MEF 2做的事情?
你好@ Metro-Smurf谢谢你的回答。我意识到这个方法是你描述的而不是一个代表。我想从这个方法中创建一个委托,例如:'Func @delegate = new Func (factory.Create);'然后注册__that__作为导出。合理?我也意识到你的答案会让我直接导出一个'IFactory '。但是,这不是我正在寻找的。请参阅我的问题以查看我想要的确切出口。看:魔术。 :)如果我请求一个'Class'对象,我实际上在某处调用了'factory.Create'。再次感谢! –
我可能误解了这个问题;对于那个很抱歉。我今天晚些时候可以仔细看看,但需要考虑几件事情:1.使用属性导出功能,该属性导出功能可以简单地导出属性返回的内容。 2.给出这样的解释:[用Mark Mmann解决MEF的封闭类型](http://blog.ploeh.dk/2011/03/14/ResolvingclosedtypeswithMEF/)再一次,我们对错误理解表示歉意。 –
不用担心!我们都去过那里。 :)我确实知道Seemann先生的帖子,但如果可能的话,在这里寻找另一条路线。一些不需要我指定类型的东西。我只是想'[Export]'IFactory'和MEF“知道”如何调用它的'Create'方法并返回实例。在Unity中有一个'InjectionFactory',可以在注册类型时使用。我正在寻找与MEF 2相似的东西。挖掘之后,我确实[找到了这个](https://github.com/MefContrib/MefContrib/blob/master/src/MefContrib/Hosting/FactoryExportProvider.cs),但它是MEF 1。 –