最近我对开发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