C# 如何在多个类中访问同一IoC容器(即Unity)?

C# 如何在多个类中访问同一IoC容器(即Unity)?,c#,dependency-injection,inversion-of-control,prism,ioc-container,C#,Dependency Injection,Inversion Of Control,Prism,Ioc Container,如何在多个类中访问同一IoC容器(即Unity) 当嵌入到方法中时,以下容器是局部变量。 因此,如何在其他类中访问此容器 using (var container = new UnityContainer()) { container.RegisterInstance(typeof(IDraftRepository), new MockDraftRepository()); } 您可以创建一个静态类,并使其将容器作为属性公开。然后所有其他类都可以访问和使

如何在多个类中访问同一IoC容器(即Unity)

当嵌入到方法中时,以下容器是局部变量。 因此,如何在其他类中访问此容器

    using (var container = new UnityContainer())
    {
        container.RegisterInstance(typeof(IDraftRepository), new MockDraftRepository());
    }

您可以创建一个静态类,并使其将容器作为属性公开。然后所有其他类都可以访问和使用它。另一种方法是将
IUnityContainer
注入到想要使用它的类中(通过构造函数注入)

话虽如此,我强烈建议你不要这样做。应该使用容器的唯一位置是,在应用程序的入口点中,您可以将所有类组合在一起

如果类需要依赖项,可以将它们注入构造函数中


在类中使用容器称为服务位置。

您可以创建一个静态类,并将容器作为属性公开。然后所有其他类都可以访问和使用它。另一种方法是将
IUnityContainer
注入到想要使用它的类中(通过构造函数注入)

话虽如此,我强烈建议你不要这样做。应该使用容器的唯一位置是,在应用程序的入口点中,您可以将所有类组合在一起

如果类需要依赖项,可以将它们注入构造函数中


在类中使用容器称为服务位置。

为什么在类中需要容器?能否详细说明为什么需要这样做?我需要访问视图模型中的资源。因此,我假设在各种视图模型中需要相同的容器引用。为什么在类中需要容器?能否详细说明为什么需要这样做?我需要访问视图模型中的资源。因此,我假设在各种视图模型中需要相同的容器引用。我的“当前”工作迫使我使用IoC容器。谢谢我假设在我的类中,我使用ServiceLocator静态类而不是实际的容器。这就是你所指的吗?我在回答中没有说你不应该使用IoC容器,我说你应该在应用程序中的特定位置使用它。我的第一个建议是通过静态类使用服务定位器,是的。因为在任何情况下,您都在使用服务定位器反模式。这可能无法完全解决问题。在我看来,OP似乎正在某个方法中创建一个
UnityContainer
的实例,并希望该容器实例在对象图的其他地方可用。在我看来,它更像是一个子容器\生命周期问题。服务定位器可能需要有上下文意识……我想OP应该为问题添加更多上下文。我的“当前”工作迫使我使用IoC容器。谢谢我假设在我的类中,我使用ServiceLocator静态类而不是实际的容器。这就是你所指的吗?我在回答中没有说你不应该使用IoC容器,我说你应该在应用程序中的特定位置使用它。我的第一个建议是通过静态类使用服务定位器,是的。因为在任何情况下,您都在使用服务定位器反模式。这可能无法完全解决问题。在我看来,OP似乎正在某个方法中创建一个
UnityContainer
的实例,并希望该容器实例在对象图的其他地方可用。在我看来,它更像是一个子容器\生命周期问题。服务定位器可能需要上下文感知……我想OP应该为问题添加更多上下文。