如何获得unitycontainer的实例?

use*_*618 2 silverlight inversion-of-control unity-container mvvm

我正在开发一个Silverlight应用程序,我已经介绍Unity了它.

我遇到的问题是我不知道如何获取容器的实例.

我在ApplicationStartup方法上创建了这个intanceApp

_container = new UnityContainer();
            _container.RegisterType<IMyAppServiceAgent, MyAppServiceAgent>(new InjectionConstructor(OriginalHandlerId, W2OGuid, ServiceEndpointAddr));
Run Code Online (Sandbox Code Playgroud)

我写了一个吸气剂

public IUnityContainer Container
        {
            get { return _container; }
        }
Run Code Online (Sandbox Code Playgroud)

一切正常,这就是我如何使用我的容器:

    public static void CreateMemberSearch()
    {
        if (_memberSearch == null)
        {

            _memberSearch =
                new MemberSearchViewModel((App.Current as App).Container.Resolve<IMyAppServiceAgent>());

        }
    }
Run Code Online (Sandbox Code Playgroud)

以上示例来自ViewModelLocator(from MVVM Light Toolkit).

我需要知道如何重构我的代码以符合IOC原则.

Seb*_*ber 5

上面显示的代码实现了ServiceLocator反模式.你永远不应该直接调用容器.

容器在Composition Root中设置.对于Silverlight应用程序,它将是您的ApplicationStartup方法或像Caliburn.Micro中的专用引导程序.

此容器实例只调用一次以解析您的主视图或视图模型(取决于您首先使用视图还是首先使用viewmodel方法).

这应该是它.你不应该再次打电话给你的容器.如果一个类依赖于某个其他组件:使用构造函数注入注入该组件.如果该类需要创建其他对象:注入工厂.Unity有一个很好的功能叫做自动工厂


更新

如果它ViewModelLocator是您的基础架构的一部分,并且您从不直接在您的应用程序代码中使用它......也许.请参阅我对@ MikePost的问题的评论.