每次初始化Prism应用程序需要多少详细的复杂性?
高级视图,如果事情是我们有两个类:
1) UnityBootstrapper
2) MefBootstrapper
根据经验和背景,您需要决定使用哪一个。什么是引导程序 为你做的是创建主窗口,也称为shell,以及其他次要的东西。 问题是在这个过程中还有许多其他复杂的细节。我该怎么用 我应该忽略什么,令人难以置信的混乱?你们是怎么开始的?对于有经验的人, 你今天关心初始化过程的细节,或者大部分你仍然关心 不知道发生了什么,你只是使用一些旧的模板代码?
答案 0 :(得分:0)
只是为了给你一个想法,这是我认为非常复杂的应用程序的MEF bootstrappers之一。这是直截了当的,真的很难理解。在后台,还有更多内容,例如自定义区域行为,适配器和整个MEF导出内容。
public class MainBootstrapper : MefBootstrapper
{
protected override Microsoft.Practices.Prism.Logging.ILoggerFacade CreateLogger()
{
return new Log4NetLogger();
}
protected override DependencyObject CreateShell()
{
return Container.GetExportedValue<Shell>();
}
protected override void ConfigureAggregateCatalog()
{
var currentFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
AggregateCatalog.Catalogs.Add(new DirectoryCatalog(currentFolder));
AggregateCatalog.Catalogs.Add(new DirectoryCatalog(currentFolder + Settings.Default.ElementsFolder));
}
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
var mappings = base.ConfigureRegionAdapterMappings();
mappings.RegisterMapping(typeof(RadPaneGroup), new RadPaneGroupRegionAdapter(ConfigureDefaultRegionBehaviors()));
mappings.RegisterMapping(typeof(Menu), new MenuRegionAdapter(ConfigureDefaultRegionBehaviors()));
return mappings;
}
protected override void InitializeShell()
{
var shellWindow = (Shell) Shell;
Application.Current.MainWindow = shellWindow;
shellWindow.Show();
shellWindow.InjectInitialViews();
}
protected override IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()
{
ViewModelInjectionBehavior.RegionsToAttachTo.Add(RegionNames.ElementViewRegion);
var behaviorFactory = base.ConfigureDefaultRegionBehaviors();
behaviorFactory.AddIfMissing("AutoPopulateExportedViewsBehavior", typeof(AutoPopulateExportedViewsBehavior));
behaviorFactory.AddIfMissing("AutoPopulateExportedMenuItemsBehavior", typeof(AutoPopulateExportedMenuItemsBehavior));
behaviorFactory.AddIfMissing("ElementViewInjectionBehavior", typeof(ViewModelInjectionBehavior));
return behaviorFactory;
}
}
我从未真正使用过Unity。 Unity需要显式配置,由于懒惰原因我不喜欢它,MEF可以是PITA进行调试,如果它没有按预期运行。
如果你将它融化到你真正需要的东西,那么在构建你的第一个PRISM应用程序时,引导序列变得更加容易,因为你不需要注册自定义映射和自定义行为。
public class MainBootstrapper : MefBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.GetExportedValue<Shell>();
}
protected override void ConfigureAggregateCatalog()
{
var currentFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? "";
AggregateCatalog.Catalogs.Add(new DirectoryCatalog(currentFolder));
}
protected override void InitializeShell()
{
var shellWindow = (Shell) Shell;
Application.Current.MainWindow = shellWindow;
shellWindow.Show();
shellWindow.InjectInitialViews();
}
}
根本没有锅炉板代码,所以不需要代码模板。或者很难理解。一如既往:尽可能少地使用,尽可能多地使用。如果您觉得需要其他功能或更复杂的配置,花哨的日志记录机制,自定义区域等等,您可以扩展您的代码,但我建议您现在专注于核心事项。