prism ConfigureContainer用于什么

时间:2014-05-31 06:34:39

标签: c# wpf unity-container prism

我正在通过微软阅读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。什么事情发生在背后?

2 个答案:

答案 0 :(得分:2)

我已注册给你答案:)。 ConfigureContainer只是抽象类UnityBootstrapper中的方法,您可以在其中注册所有Prism服务(ModuleManagerRegionManagerEventAggregator)。您可以创建自定义Bootstrapper类,您可以在其中管理您的依赖项。在您的情况下,每当您在代码中询问IShellView时,您都会获得Shell的实例。

我建议你this book。它是免费的。

答案 1 :(得分:1)

PRISM提供的

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