【发布时间】:2013-07-04 11:55:47
【问题描述】:
最近我对开发 PRISM WPF 应用程序产生了兴趣。现在我正在尝试从构建模块项目(Wpf 用户控件库)后创建的 DLL 加载我的模块。在构建模块项目期间,我将 DLL 复制到调试文件夹中(复制:xcopy /y "$(TargetPath)" "$(SolutionDir)FooBar\$(OutDir)Modules\")。接下来我配置引导程序,我认为我丢失了它。
我将在下面附上我的代码。
引导程序
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();
}
视图模型库
public abstract class ViewModelBase : INotifyPropertyChanging, INotifyPropertyChanged,IModule
{
//Implementation INotify etc..
public void Initialize()
{
}
}
所以我想知道为什么我的 ModuleCatalog.Modules 总是 0。有人可以帮我吗?
【问题讨论】:
-
我和你一样使用目录技术,但不指定目录。 但是模块必须与包含引导程序的程序集位于同一目录中!这是我乐于忍受的限制。
-
我必须添加 moduleCatalog.Initialize();到 prism 的 ConfigureModuleCatalog 找到任何模块。
标签: c# wpf module bootstrapping prism-4