C# 在.NET 4中使用DirectoryCatalog创建同一零件的多个实例
我正在尝试创建使用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
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)很陌生。这个解决方案看起来是这样的,但我无法理解如何根据名称创建不同的插件(我在类中有一个属性来声明插件名称)。