wpf - 在 WPF 应用程序中何处放置和配置 IoC 容器?

标签 wpf inversion-of-control unity-container containers where-clause

我正在开发一个中型 WPF 应用程序 (MVVM),该应用程序将来应该是可扩展和可维护的。因此,我决定使用 IoC 容器(在本例中为 Unity)来保持灵 active 。

但是我不确定在 WPF 应用程序中的何处放置和配置 Unity。

我猜容器应该可以全局访问,所以它可能应该进入应用程序类。但我应该将其设为静态属性吗?我应该在 Application_Startup() 事件处理程序中配置它吗?

例如:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    public static UnityContainer MyUnityContainer;


    private void Application_Startup(object sender, StartupEventArgs e)
    {
        // instantiate and configure Unity
    }
}

这样我就可以通过静态属性从应用程序中的任何位置访问容器:

App.MyUnityContainer

我想这是一种方法,但我不确定是否有更好的做法来解决这个问题,特别是对于 WPF 应用程序。

最佳答案

看看 Composition Root Pattern 。您要做的就是在 Startup 事件处理程序中初始化它,并在应用程序的其余部分中忘记它的存在。

您正在尝试实现 Service Locator Pattern ,根据许多is an inferior solution对于这个问题。

关于wpf - 在 WPF 应用程序中何处放置和配置 IoC 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372463/

相关文章:

C# WPF 页面间导航( View )

c# - 我应该使用 Unity Config 文件还是代码来注册类型和实例?

inversion-of-control - Unity 有 CreateChildContainer,在 SimpleInjector 或 LightInject 中有等价物吗

mvvm - MvvmCross IoC 中的子容器

c# - Microsoft Unity 和动态类型/程序集加载

c# - 对 DI、IoC、Unity 和 Moq 的类型注册和实现感到困惑

wpf - Path.Data 样式仅适用于样式对象的第一个实例

c# - 具有附加属性的 ControlTemplate 中的命令绑定(bind)

c# - 在 Unity 中使用 IOptions

c# - 如何在 WPF DataGrid 中按列搜索?