我正在通过微软阅读Prism库。我只是不理解ConfigureContainer()
。
shell应用程序中的代码如下:
internal class JamSoftBootstrapper : UnityBootstrapper
{
protected override IModuleEnumerator GetModuleEnumerator()
{
return new DirectoryLookupModuleEnumerator("Modules");
}
protected override void ConfigureContainer()
{
Container.RegisterType<IShellView, Shell>();
base.ConfigureContainer();
}
protected override DependencyObject CreateShell()
{
ShellPresenter presenter = Container.Resolve<ShellPresenter>();
IShellView view = presenter.View;
view.ShowView();
return view as DependencyObject;
}
}
public interface IShellView
{
void ShowView();
}
public class ShellPresenter
{
public IShellView View { get; private set; }
public ShellPresenter(IShellView view)
{
View = view;
}
}
我想了解为什么我在ConfigureContainer()中注册了IShellView,Shell。什么事情发生在背后?
答案 0 :(得分:2)
我已注册给你答案:)。 ConfigureContainer
只是抽象类UnityBootstrapper
中的方法,您可以在其中注册所有Prism
服务(ModuleManager
,RegionManager
,EventAggregator
)。您可以创建自定义Bootstrapper
类,您可以在其中管理您的依赖项。在您的情况下,每当您在代码中询问IShellView
时,您都会获得Shell
的实例。
我建议你this book。它是免费的。
答案 1 :(得分:1)
UnityBootstrapper
在内部使用UnityContainer来解析已注册对象的依赖关系。您可以像使用样本一样配置自定义对象。
在您的示例中,您使用 Shell
实例注册了 IShellView
。
Container.RegisterType<IShellView, Shell>();
因此,每当您要求容器获取IShellView的对象时,它将为您提供Shell对象的实例。
IShellView shellObject = Container.Resolve<IShellView>();
因此, ConfigureContainer
可让您支持使用它的容器注册对象。
来自MSDN链接:
配置IUnityContainer。可能会在派生类中被覆盖 添加应用程序所需的特定类型映射。
此外,您可以在此处阅读更多相关信息 - Managing Dependencies Between Components Using the Prism Library 5.0 for WPF。