gpt4 book ai didi

silverlight - 如何获取unitycontainer的实例?

转载 作者:行者123 更新时间:2023-12-03 10:13:37 24 4
gpt4 key购买 nike

我正在开发一个 Silverlight 应用程序,并介绍了 Unity进去。

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

我在 ApplicationStartup 中创建了这个实例App 上的方法

_container = new UnityContainer();
_container.RegisterType<IMyAppServiceAgent, MyAppServiceAgent>(new InjectionConstructor(OriginalHandlerId, W2OGuid, ServiceEndpointAddr));

我写了一个 setter/getter
public IUnityContainer Container
{
get { return _container; }
}

一切正常,这就是我使用容器的方式:
    public static void CreateMemberSearch()
{
if (_memberSearch == null)
{

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

}
}

上面的示例来自 ViewModelLocator(来自 MVVM Light Toolkit )。

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

最佳答案

上面显示的代码实现了 ServiceLocator anti-pattern .你永远不应该直接调用容器。

容器设置在 Composition Root .对于将成为您的 ApplicationStartup 方法或专用 Bootstrap 的 Silverlight 应用程序,如 Caliburn.Micro .

此容器实例仅被调用一次以解析您的主视图或 View 模型(取决于您是使用 View 优先还是 View 模型优先方法)。

应该就是这样。你永远不应该再次调用你的容器。如果一个类依赖于其他组件:使用 constructor injection 注入(inject)该组件.如果该类需要创建其他对象:注入(inject)工厂。 Unity 有一个不错的功能,叫做 automatic factories

更新

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

关于silverlight - 如何获取unitycontainer的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com