繁体   English   中英

如何在MEF 2中导出工厂和/或其方法?

[英]How Can I Export a Factory and/or its Method in MEF 2?

我正在研究MEF 2 (Microsoft.Composition),并希望将其与现有代码库集成。

我当前的代码库具有一个带有简单签名的IFactory接口:

public interface IFactory<T>
{
    T Create();
}

我想注册我的工厂,以便在工厂进行出口时将其注册为工厂T输出的Func<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.
}

我确实看到了这个问题 ,但是它似乎不适用于MEF2。现在各种各样的事情都不同了,但是看起来更加轻巧/简化(如广告所示!)。

是否可以实现我对MEF 2的期望?

public Class Create() => new Class(); 不是代表。 在C#6中,这称为表达式主体成员函数

以下2条语句在C#6中是等效的:

// Expression-bodied member function
public MyClass Create() => new MyClass();

// standard member function
public MyClass Create()
{
    return new MyClass();
}

就解析IFactory<Class>然后使用工厂而言,只需使用要输出的类型装饰工厂即可,并根据需要使用:

[Export( typeof( IFactory<MyClass> ) )]
public class Factory : IFactory<MyClass>
{
    public MyClass Create() => new MyClass();
}

构建容器后,解决方案很简单:

var factory = container.GetExport<IFactory<MyClass>>();

MyClass mc = factory.Create();

暂无
暂无

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

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