我正在使用Prism 4和MEF进行WPF项目。我有一些需要从目录加载的DLL。这些DLL通过 IGame 实现了 IModule 并且已经正确形成(或者至少我认为是这样):
[Module(ModuleName = "SnakeModule")]
class SnakeModule : IGame
{
public void Initialize()
{
Console.WriteLine("test");
}
public void StartGame()
{
throw new NotImplementedException();
}
}
目前,主项目正在编译,但模块未初始化。我无法理解如何设置我的引导程序,并且文档没有多大帮助,因为它没有 DirectoryModuleCatalog 的完整示例。模块化快速入门也没有编译。这是我的引导程序:
class BootStrap : MefBootstrapper
{
protected override DependencyObject CreateShell()
{
return ServiceLocator.Current.GetInstance<Shell>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow = (Window)this.Shell;
Application.Current.MainWindow.Show();
}
protected override void ConfigureAggregateCatalog()
{
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(BootStrap).Assembly));
}
protected override IModuleCatalog CreateModuleCatalog()
{
DirectoryModuleCatalog catalog = new DirectoryModuleCatalog() { ModulePath = @"..\..\..\GameTestLib\bin\Debug" };
return catalog;
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
}
}
DLL的路径是正确的。总而言之,我的问题是:我应该如何设置我的引导程序?
答案 0 :(得分:4)
首先,既然您正在使用Prism,我建议您使用 ModuleExport ,如下所示:
[ModuleExport("SnakeModule", typeof(IGame))]
但是你的问题实际上来自你没有将你的课程设置为公共课程的事实,因此阻止了你的模块的发现。因此,您需要将代码更改为:
[ModuleExport("SnakeModule", typeof(IGame))]
public class SnakeModule : IGame
{
public void Initialize()
{
Console.WriteLine("test");
}
public void StartGame()
{
throw new NotImplementedException();
}
}
它应该没问题!