我有一個簡單的控制檯應用程序如以下的(未相關的代碼爲簡單起見移除)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