让我解释一下我需要的一个非常简单的例子。让我们说我有一个使用MEF的VS解决方案,并且具有以下广泛的项目和类结构。
Main
方法,用于启动应用。)...鉴于
...我可以启动一个应用程序,并在我的MySettings
应用程序中初始化MyLogger
和Server
的单例。到目前为止,非常好。
现在,我们假设MyLogger
需要访问输出目录的设置文件。目录位置的值存储在MySettings
对象中,该对象在Server.cs
中初始化为CompositonContainer
。
由于我使用MEF,我不想在Settings
项目中引用Logger
项目。相反,我想使用MEF来获取当前应用程序ISettings
单例,它在我的Server
应用程序开始时初始化,并且存在服务器CompositionContainer
。
如何使用MEF从MySettings
内正确访问MyLogger
单身?
答案 0 :(得分:1)
服务器:
class Services
{
[Import]
public ISettings Settings
{
get; set;
}
[Import]
public ILogger Logger
{
get; set;
}
}
static void Main()
{
AggregateCatalog catalog = new AggregateCatalog();
catalog.Add(new AssemblyCatalog(Assembly.GetAssembly(typeof(SettingsProject.MySettings));
catalog.Add(new AssemblyCatalog(Assembly.GetAssembly(typeof(LoggerProject.MyLogger));
Services services = new Services();
CompositionContainer cc = new CompositionContainer(catalog);
cc.ComposeParts(services);
// services properties are initialized
}
设置项目
[Export(typeof(ISettings)]
class MySettings
{
}
记录器项目
[Export(typeof(ILogger)]
class MyLogger : ILogger
{
[ImportingConstructor]
public MyLogger(ISettings settings)
{
}
}