最近我對開發PRISM WPF應用程序感興趣。現在我試圖從構建模塊項目(Wpf用戶控制庫)後生成的DLL中加載我的模塊。在構建模塊項目期間,我將DLL複製到調試文件夾(複製:xcopy/y「$(TargetPath)」「$(SolutionDir)FooBar \ $(OutDir)Modules \」)。接下來,我配置引導程序,我認爲有我失去了它。從DLL中加載棱鏡模塊
我會在下面附上我的代碼。
引導程序
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
var shell = ServiceLocator.Current.GetInstance<Shell>();
return shell;
}
protected override void InitializeShell()
{
base.InitializeShell();
App.Current.MainWindow = (Window)this.Shell;
App.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return base.CreateModuleCatalog();
}
protected override void ConfigureModuleCatalog()
{
var moduleCatalog = new DirectoryModuleCatalog();
moduleCatalog.ModulePath = Environment.CurrentDirectory + @"\Modules";
ModuleCatalog = moduleCatalog;
}
protected override void InitializeModules()
{
base.InitializeModules();
}
protected override ILoggerFacade CreateLogger()
{
return base.CreateLogger();
}
}
Shell.xaml.cs
protected readonly IModuleCatalog _moduleCatalog;
public Shell(IModuleCatalog moduleCatalog)
{
this._moduleCatalog = moduleCatalog;
InitializeComponent();
}
App.xaml.cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
ViewModelBase
public abstract class ViewModelBase : INotifyPropertyChanging, INotifyPropertyChanged,IModule
{
//Implementation INotify etc..
public void Initialize()
{
}
}
所以我想知道爲什麼我的ModuleCatalog.Modules總是0.有人可以幫我嗎?
我使用像您一樣的目錄技術,但不指定目錄。 *但是*模塊必須與包含引導記錄器的程序集位於同一目錄中!這是我很高興與之共存的一個限制。 –
我不得不添加moduleCatalog.Initialize();到用於棱鏡的ConfigureModuleCatalog查找任何模塊。 – Rtype