其他分享
首页 > 其他分享> > CodeGo.net>如何使DirectoryModuleCatalog工作?

CodeGo.net>如何使DirectoryModuleCatalog工作?

作者:互联网

我在WPF项目中使用Prism 4和MEF.我有一些需要从目录加载的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的路径正确.总而言之,我的问题是:我应该如何设置我的引导程序?

解决方法:

首先,由于您使用的是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();
    }

}

而且应该没问题!

标签:bootstrapper,mef,prism,c,net
来源: https://codeday.me/bug/20191031/1975293.html