我正在嘗試使用MEF實現工廠模式。工廠模式與託管擴展框架(MEF)
這裏是我的解決方案
核心項目
IClass
ObjectFactory static Class(This is where the problem is)
項目A
[Export(typeof(IClass))]
[ExportMetadata("Type", "TypeA")]
public classA : IClass
{}
項目B
[Export(typeof(IClass))]
[ExportMetadata("Type", "TypeB")]
public classB : IClass
{}
我面臨的問題,當我試圖創建對象dynami凱莉
這裏是工廠類:
public static class ObjectFactory
{
private static readonly CompositionContainer _container;
[ImportMany]
public static IEnumerable<Lazy<IClass, IMetaData>> objectTypes;
static ObjectFactory()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(Environment.CurrentDirectory));
_container = new CompositionContainer(catalog);
try
{
objectTypes = _container.GetExports<IClass, IMetaData>();
}
catch (CompositionException compositionException)
{
Console.WriteLine(compositionException.ToString());
Console.ReadLine();
}
}
public static IClass CreateObject(ObectType objectType)
{
IClass outProvider;
Type typeToLoad = objectTypes.Where(x => x.Metadata.Type == objectType.ToString()).FirstOrDefault().GetType();
outProvider = (IClass)Activator.CreateInstance(typeToLoad);
return outProvider;
}
}
感謝您的更新EdZ。有用。我還沒有意識到我的objectType在類級別是靜態的,並且每次都給出相同的對象。 來到你的構造函數參數上的Q,我改變了classA和ClassB def並刪除了構造函數的參數。現在它可以工作,每次它給我新的實例。 – user3397876 2014-10-13 17:57:38