我有一个简单的控制台应用程序如以下的(未相关的代码为简单起见移除)MEF和AssemblyCatalog/AggregateCatalog
[ImportMany(typeof(ILogger))]
public IEnumerable<ILogger> _loggers {get;set;}
public interface ILogger
{
void Write(string message);
}
[Export(typeof(ILogger))]
public class ConsoleLogger : ILogger
{
public void Write(string message)
{
Console.WriteLine(message);
}
}
[Export(typeof(ILogger))]
public class DebugLogger : ILogger
{
public void Write(string message)
{
Debug.Print(message);
}
}
的代码初始化目录低于
(1) var catalog = new AggregateCatalog();
(2) catalog.Catalogs.Add(new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory));
(3) //var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
var container = new CompositionContainer(catalog);
var batch = new CompositionBatch();
batch.AddPart(this);
container.Compose(batch);
如果目录如果目录是通过第3行初始化的,两个记录器都被加载到_logger中
什么是“ AggregateCatalog方法的问题是什么?
谢谢
谢谢。但我期望线DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory)添加到应用程序的bin文件夹中的所有DLL的目录导出(这是我真正想要的某个点)。与AssemblyCatalog不同,它只是增加当前Assembly的输出。如何查找所有DLL中的导出? – bzamfir 2012-02-19 20:04:28