C# 在.NET 4中使用DirectoryCatalog创建同一零件的多个实例

C# 在.NET 4中使用DirectoryCatalog创建同一零件的多个实例,c#,.net-4.0,mef,C#,.net 4.0,Mef,我正在尝试创建使用DirectoryCatalog导入的同一零件的多个实例,以便让我已经拥有的类使用同一零件的“个人”实例,如下所示: interface TMyType { some method... } public class PluginHelper { ImportMany of type TMyType with CreationPolicy non shared ... public bool GetPluginByName(string na

我正在尝试创建使用DirectoryCatalog导入的同一零件的多个实例,以便让我已经拥有的类使用同一零件的“个人”实例,如下所示:

interface TMyType
{
    some method...
}

public class PluginHelper
{
    ImportMany of type TMyType with CreationPolicy non shared
    ...

    public bool GetPluginByName(string name)
    {
        GetPlugin based on name requested
    }
}

class A
{
    plugin = PluginHelper.GetPluginByName("PLUGIN1")
}

class B
{
    plugin = PluginHelper.GetPluginByName("PLUGIN1")
}
这实际上是可行的,但A.plugin和B.plugin是同一个实例。。。使用.NET4(不是4.5)看起来应该在每个类中移动导入,然后在那里选择所需的插件。我知道我可以使用Lazy来避免在构图时创建零件,但看起来还是有点难看

一直在谷歌上搜索,但都没有用


TIA

为什么不干脆用工厂来做呢

//inside class: example PluginFactory
public IPlugin ReturnSomeType<T>() where T : IPlugin, new()
{
    return new T();
}

//if the plugins don't share the same interface
public T ReturnSomeType<T>() where T : class, new()
{
    return new T();
}

//usage
var factory = new PluginFactory();
var pluginA = factory.ReturnSomeType<SomePluginA>();
var pluginB = factory.ReturnSomeType<SomePluginB>();
//类内:示例PluginFactory
public IPlugin ReturnSomeType(),其中T:IPlugin,new()
{
返回新的T();
}
//如果插件不共享同一接口
public T ReturnSomeType(),其中T:class,new()
{
返回新的T();
}
//用法
var factory=new PluginFactory();
var pluginA=factory.ReturnSomeType();
var pluginB=factory.ReturnSomeType();

我认为这是我问题的解决方案,也是斯蒂芬试图向我解释的:)


我对MEF和.NET 4(多年来一直在使用.NET 2)很陌生。这个解决方案看起来是这样的,但我无法理解如何根据名称创建不同的插件(我在类中有一个属性来声明插件名称)。