【问题标题】:WPF Dynamic UserControl ContainerWPF 动态用户控件容器
【发布时间】:2015-03-27 01:49:37
【问题描述】:
我的任务是创建一个 UI 容器,其中不同的 UI 将从 DLL 中自动加载。这些 UI 或视图将遵循一个通用界面。在程序集中还将包含有关要显示为树视图的设置的信息。使用 WPF 在 c# 中创建此类解决方案的最佳实践是什么?棱镜似乎是要走的路 - 你同意吗?
【问题讨论】:
标签:
c#
wpf
containers
prism
【解决方案1】:
prism 的优点是众所周知,如果您遵循实践,您可以参考 prism 文档。我想说,优势到此为止。
您可以使用 Unity 或 MEF 等 IoC 容器来加载模块并将一些 IApplicationContext 实现注入模块。然后,您的模块将向 ApplicationContext 注入内容。这里不需要棱镜。
假设您的模块由 IModuleImplementation 标识:
public interface IModule
{
void Initialize(IApplicationContext applicationContext);
}
在您的应用程序中引导您的模块:
public void Bootstrap()
{
var applicationContext = new ApplicationContext();
IModule[] modules = LoadModulesFromDirectoryAssemblies();
foreach (var module in modules)
{
module.Initialize(applicationContext);
}
}
模块会注入任何需要的东西:
public class Module1 : IModule
{
public void Initialize(IApplicationContext applicationContext)
{
//inject Module1 services, views, menuitems, command etc. to applicationContext.
}
}
然后,您的 shell 窗口将在应用程序上下文中获得注入的内容并将其反映在 UI 中。