【问题标题】:How to get DirectoryModuleCatalog to work?如何让 DirectoryModuleCatalog 工作?
【发布时间】:2013-01-18 09:34:07
【问题描述】:

我将 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 的路径正确。总而言之,我的问题是:我应该如何设置我的引导程序?

【问题讨论】:

    标签: c# .net prism mef bootstrapper


    【解决方案1】:

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

    应该没问题!

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 2011-04-07
      • 2011-07-27
      • 2011-03-08
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多