2013-01-18 86 views
3

我正在使用棱鏡4和MEF的WPF項目。我有一些需要從目錄加載的DLL。這些DLL通過的iGame實現的IModule和正確形成(或至少我是這麼認爲的):如何讓DirectoryModuleCatalog正常工作?

[Module(ModuleName = "SnakeModule")] 
class SnakeModule : IGame 
{ 
    public void Initialize() 
    { 
     Console.WriteLine("test"); 
    } 

    public void StartGame() 
    { 
     throw new NotImplementedException(); 
    } 

} 

目前,主體工程正在編制,但模塊不會被初始化。我無法理解如何設置引導程序,並且文檔沒有什麼幫助,因爲它沒有DirectoryModule目錄的完整示例。模塊化快速入門也沒有編譯。這裏是我的引導程序:

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的路徑是正確的。總結一下,我的問題是:我應該如何設置我的引導程序?

回答

4

首先,因爲你正在使用棱鏡,我建議你去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(); 
    } 

} 

它應該沒問題!