최근 PRISM WPF 응용 프로그램을 개발하는 데 관심이있었습니다. 이제 모듈 프로젝트 (Wpf User Control Library)를 빌드 한 후 만든 DLL에서 모듈을로드하려고합니다. modules 프로젝트를 빌드하는 동안 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