首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Unity容器DI,是否需要在代码库中的任何地方调用container.Resolve<>

Unity容器是一个依赖注入(Dependency Injection,DI)容器,用于管理对象之间的依赖关系。在使用Unity容器时,我们可以通过配置文件或者代码注册依赖项,然后容器会自动解析并提供这些依赖项。

在代码库中调用container.Resolve<>方法是用于从容器中解析指定类型的实例。通常情况下,我们不推荐在代码库中的任何地方直接调用container.Resolve<>方法,这违背了依赖注入的原则,会导致代码高度耦合,难以维护和测试。

使用依赖注入的目的是将依赖关系的创建和解析过程交给容器管理,而不是在代码中直接创建和解析依赖项。这样做的好处是可以实现松耦合,提高代码的可测试性和可维护性。

正确的做法是在代码库中使用构造函数、属性或方法注入的方式,通过依赖注入容器自动注入依赖项。例如,在使用Unity容器时,可以通过构造函数注入的方式将依赖项传递给需要使用它们的类。

以下是一个示例代码:

代码语言:txt
复制
public class MyClass
{
    private readonly IMyDependency _myDependency;

    public MyClass(IMyDependency myDependency)
    {
        _myDependency = myDependency;
    }

    // 使用依赖项
    public void DoSomething()
    {
        _myDependency.SomeMethod();
    }
}

在上述示例中,通过构造函数注入的方式将IMyDependency接口的实例传递给MyClass类,这样就可以在DoSomething方法中使用_myDependency。

总结来说,不建议在代码库中的任何地方调用container.Resolve<>方法,而应该通过依赖注入的方式将依赖项传递给需要使用它们的类。这样可以实现松耦合、可测试和可维护的代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个简单小程序演示Unity三种依赖注入方式

[源代码从这里下载] 首先创建一个控制台程序,并添加如下两个基于Unity程序集被引用:Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll...在这段配置,定义了一个名称为defaultContainerUnity容器,并在其中完成了上面定义接口和对应实现类之间映射类型匹配。 1: <?xml version="1.0"?...然后调用泛型Resolve方法创建一个实现了泛型接口IA对象。最后将返回对象转变成类型A,并检验其B、C和D属性是否是空。...这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓反转。比如,在类型A需要使用类型B实例,而B实例创建并不由A来负责,而是通过外部容器来创建。...,IoC容器会自动初始化该属性; 方法注入(Method Injection):如果被依赖对象需要调用某个方法进行相应初始化,在该对象创建之后,IoC容器会自动调用该方法。

1.7K70
  • ASP.NET Web API依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析

    ProductRepository存在依赖,你必须在ProductController配置他们,对于一个拥有很多控制器大项目来说,你就配置工作将深入到任何可能地方; 这是很难去做单元测试因为控制器硬编码了对数据查询...IoC容器是一个用来管理依赖项目的组建,你可以在其中注册类型,在使用时候创建对象,IoC容易自动解析出依赖关系,许多IoC容器允许你在对象生命周期中进行控制。...Install-Package Unity 以下是一个使用Unity容器对IDependencyResolver实现: using System; using System.Collections.Generic...对象DependencyResolver属性上设置依赖解析器,以下代码使用Unity注册IProductRepository接口并且创建一个UnityResolver,修改App_Start/WebApiConfig.cs...Register方法 namespace Pattern.DI.MVC { public static class WebApiConfig { public static

    2.2K80

    控制反转-Ioc之Unity

    本篇幅主要介绍控制反转一些概念,和如何使用Unity实现Ioc。在介绍时候,会尽量结合代码来讲解一些概念。 1.什么是DI?...DI即控制反转,是将对具体实现类依赖转变为对接口依赖,这样在编程,就可以发挥类多态性。我们先假设一台印钞机,功能是打印钞票,根据使用模板,可以印人民币(想到这里,我做梦都乐了)。...就是将对象或实现类,注册到Ioc容器,在需要使用地方再调用Resolve获取对象即可,这样,无论我们在哪里需要,都可以用Ioc容器来获取对象,而不再需要使用new来创建对象了。...4.使用配置文件配置注入 但是,我们显然不满足于这样,我们还想把实现,彻彻底底代码移除,这里我们就可以借助配置文件来实现了。...,那么父容器与子容器对象都是单例,但是子类与父类里对象不是同一个;

    67210

    Unity 依赖注入

    1、构造器注入 IOC容器会智能选择和调用合适构造函数,以创建依赖对象,如果被选择构造函数具有相应参数,IOC容器调用构造函数之前会解析注册依赖关系并自行获得相应参数。...,以创建依赖对象,如果被选择构造函数具有相应参数,IOC容器调用构造函数之前会解析注册依赖关系并自行获得相应参数。...,以创建依赖对象,如果被选择构造函数具有相应参数,IOC容器调用构造函数之前会解析注册依赖关系并自行获得相应参数。...,都已近介绍了,但是除了构造器注入当我们使用属性注入和方法注入时候,并通过RegisterType,会产生代码产生耦合,当我们添加一个方法或者一个属性或者添加一个方法,都需要去修改代码,这设计显然是不太合理...当我们声明一个类型为ContainerControlledLifetimeManager,说明该类型就是单例,所以当我们在程序获取该类型实例时,IOC容器会返回上次创建实例,而不会重新创建一个实例

    1.2K80

    Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block集成

    在PostBuildUp,将PolicyInjectionPolicy从BuilderContext 取出,调用ApplyProxy方法将创建对象通过PolicyInjecctor进行封装,那么调用被封装过对象...PolicyInjectionExtension 我们现在将我们定义PolicyInjectionExtension使用到实际场景,看看它能够像我们希望那样,调用通过Unity container...四、通过configuration方式应用PolicyInjectionExtension Unity主要目的是实现了DI(dependency injection)....DI目的说白了还是实现松耦合。而送耦合实现一个主要途径还是将编译时依赖转换成运行时依赖。所以在很多情况下只用通过配置方式才能真正意义上实现解耦。...而Unity大多数使用场景还是基于configuration方式。为了实现上一节通过coding一样功能,我们定义了如下Unity配置: 1: <?

    68070

    Unity容器简单AOP与DI应用Demo(基于asp.net mvc框架)

    ,参照了《ASP.NETMVC5框架揭秘》一书最后网站示例架构,使用Unity容器作为DI容器以及实现AOP。...首先Repository文件夹里面的代码文件: 见百度网盘链接 整个Repository相当于三层架构里面的DAL数据访问层,它作用就是调用数据,封装了最基本增删改查,当然你可以选择ADO.NET...其次就是Services文件夹里面的代码文件: 见百度网盘链接 整个Services文件主要功能就是调用下一层Repository文件夹相关类。...我们在这里就是使用DI构造函数注入了,使用接口来实现解耦,这就需要用到unity容器了。这个层次是为上一层控制器层服务。...Unity构造函数,用unity容器创建AOP,AOP实现是基于IFooService接口与FooService类,IBarService接口和BarService类

    21120

    你知道Unity IoC Container是如何创建对象吗?

    Unity 2.0,微软直接将ObjectBuild(实际上是ObjectBuild第二个版本ObjectBuild2)绝大部分功能实现在了Unity,而EnterLib则直接建立在Unity...”(我不知道是否真的具有这样一种叫法)。...这就需要在整个管道范围内共享一些上下文(Context),上下文是对管道处理对象和处理环境封装。...具体来说,当需要利用该管道创建某个对象时候,先按照BuilderStrategy在管道顺序调用PreBuildUp方法,到管道底端后,按照相反顺序调用PostBuildUp方法。...在上述属性列表,BuildComplete表示Build操作是否被标识为结束,如果某个BuilderStrategy已经完成了Build操作,可以将其设置为True,这样后续BuilderStrategy

    1.1K90

    .NET Core 3 WPF MVVM框架 Prism系列之数据绑定

    一.安装Prism 1.使用程序包管理控制台 Install-Package Prism.Unity -Version 7.2.0.1367 也可以去掉‘-Version 7.2.0.1367’获取最新版本...为啥安装prism会跟Prism.Unity有关系,我们知道Unity是个IOC容器,而Prism本身就支持IOC,且目前官方支持几种IOC容器: ?...1.且unity由于是微软官方,且支持prism组件化,由此我推荐使用prism.unity,在官方文档prism7不支持prism.Mef,Prism 7.1将不支持prism.Autofac...2.安装完prism.unity就已经包含着所有prism核心了,架构如下: ?...就算是不注释修改命名规则代码,我们发现运行结果还是一样,因此我们可以得出结论, 这种直接,不通过反射注册自定义注册方式优先级会高点,在官方文档也说明这种方式效率会高点 且官方提供4种方式,其余三种注册方式如下

    1.4K40

    Unity Container几种注册方式与示例1.实例注册2.简单类型注册

    1.实例注册 最简单注册方式就是实例注册,Unity 容器负责维护对一个类型单例引用,比如: 有如下实际类型: namespace ConsoleSample { public class...方法对这个类型进行解析和调用: SampleClass resolvedSampleClass1 = (SampleClass)container.Resolve(typeof(SampleClass)...SampleClass)); resolvedSampleClass2.Increase(); Console.WriteLine(resolvedSampleClass2.ReferenceCount); 查看调用结果...,可以发现这里解析并调用实同一个类实例: ?...); Console.WriteLine(fuckUp2.IncreaseFlag()); 通过调用结果可以看出,此次解析两个类型时为创建两个新对象,我们使用了在1节不同方式对类型进行解析 ?

    1.4K60

    让IoC动态解析自定义配置(提供基于Unity实现)

    IoC目的就是通过解析注册依赖注入信息,最终创建出我们希望某个对象。而只有通过配置方式来定义IoC容器需要注入信息,才能实现灵活设计。...所以,如果将两者集成起来,让IoC容器能够解析通过配置定义“依赖注入”信息,具有很大现实意义。接下来,我们将通过Unity为例,介绍IoC和自定义进行无缝集成实现方案。...在这里我采用是微软Unity这种轻量级IoC容器,并沿用《.NET资源并不限于.resx文件,你可以采用任意存储形式》中介绍应用场景——基于多种存储方式资源管理框架。...:DbResourceProvider和XmlResourceProvider,它们分别基于数据表和XML文件资源存储形式。...现在我们就来介绍ResourceSettings如果为UnityContainer提供类型注册信息,现在我们将关注点放在上面给出代码省略部分。

    96890

    使用Unity创建依赖注入依赖注入生命周期:注册、解析、销毁   注册解析销毁

    在本章您将看到怎么样使用Unity依赖注入容器去更简单在您应用程序添加依赖注入框架。...这个例子是一个很简单类型映射让您可以定义使用Unity容器。在后面的章节,您将看到在Unity容器中注册类型和对象一些方法,可以适用于更复杂情形,具有更好灵活性。...var controller = container.Resolve(); 在这个示例,您不需要直接去实例化ManagementController,而是使用...在这个场景Unity容器第一个构造TenantStore对象并且通过它去构造一个ManagementController类。...销毁 在这个简单示例在前几节掩饰了注册和解析类型,应用程序存在一个ManagementController类型controller变量,当您调用Resolve方法时,Unity容器创建以个新TenantStore

    1.5K60

    控制反转和依赖注入模式

    上图是最基本三层框架,具体流程如下: 1、表现层调用业务层方法 2、业务层调用数据层方法,并对数据层返回基础数据进行加工返回给业务层 3、数据层与数据进行数据交互,并将数据传递给业务层 同时...ok,说了这么多时间,控制反转和DI(依赖注入)终于入场了, 1、控制反转:上面的代码创建对象权利我们自己(通过强编码new方式),现在我们将创建对象也就是new权利交给IOC容器,这应该就是所谓控制反转...IOC容器它可以创建对象实例,但是创建完实例,之后不能就这么完了,必须进行依赖注入,将 对象实例注入到需要它们,所以修改UserBll.cs代码如下: using System; using System.Collections.Generic...,将数据层实例注入到了业务层实例,现在业务层算是和数据层整个解耦了,现在我们可以通过IOC容器创建对应数据实例,并通过IOC容器将创建后实例注入到业务层实例!...,并在运行时通过IOC容器创建数据层实例 UserBll bll = container.Resolve();//将创建完实例注入到对应业务类

    654100

    Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver

    ,因为对于调用创建ProductRepository 是通过在控制器硬编码方式实现。...如果要使用IProductRepository不同实例,我们将需要在ProductRepository改变代码。...如果你使用一个Ioc容器,你不需要在代码中直接连同对象,几个开源.Net Ioc容器是可以利用,例如Autofac, Castle Windsor, Ninject, Spring.NET, StructureMap...这个IoCContainer 类实现了全局范围内依赖解析。并在BeginScope 方法创建一个新ScopeContainer对象。这个Unity 容器也有一个子容器概念。...因为我们可以用Unity 容器来初始化ScopeContainer 。这个ScopeContainer.Dispose方法释放了Unity容器

    73340

    C#设计模式之策略模式

    背景:   策略模式在我们实际项目开发,使用比较多一种设计模式,直接贴一个demo处理供大家参考,如有不对地方,多多指点交流 定义:   策略模式是针对一组算法,将每个算法封装到具有公共接口独立...增加一个新策略只需要添加一个具体策略类即可,基本不需要改变原有的代码。 主要缺点:   使用方需要了解所有策略实现,并自行决定调用那一策略。...为了使用方灵活,可以采用依赖注入方式来处理,微软提供了一个依赖注入技术:unity,可以参考使用 代码示例: using Microsoft.Practices.Unity.Configuration;...using System; using System.Configuration; using Unity; /// /// 定义:策略模式是针对一组算法,将每个算法封装到具有公共接口独立...//```这点可以考虑使用IOC容器和依赖注入方式来解决,关于IOC容器和依赖注入(Dependency Inject) /// namespace StragetyPattern

    82350

    ASP.NET CoreGetService()和GetRequiredService()之间区别

    容器核心 - IServiceProvider接口 ASP.NET Core依赖注入抽象核心是IServiceProvider接口。该接口实际上是System命名空间中基类一部分。...它们只是一种便利,因此您在自己代码不需要使用更多typeof()和类型转换。...如果您使用GetService(),那么您需要在调用代码检查是否为null,并且通常需要抛出异常。那个空检查代码要在任何地方重复。 失败很快。...在我看来,这很少是应用程序代码好模式。回退编排应该是DI容器配置一部分,而不是使用服务位置。...因此,在使用第三方容器时最好使用GetRequiredService()。就个人而言,我会在任何地方使用它,即使我只使用内置DI容器

    1.7K20

    ASP.NET CoreGetService()和GetRequiredService()之间区别

    容器核心 - IServiceProvider接口 ASP.NET Core依赖注入抽象核心是IServiceProvider接口。该接口实际上是System命名空间中基类一部分。...它们只是一种便利,因此您在自己代码不需要使用更多typeof()和类型转换。...如果您使用GetService(),那么您需要在调用代码检查是否为null,并且通常需要抛出异常。那个空检查代码要在任何地方重复。 失败很快。...在我看来,这很少是应用程序代码好模式。回退编排应该是DI容器配置一部分,而不是使用服务位置。...因此,在使用第三方容器时最好使用GetRequiredService()。就个人而言,我会在任何地方使用它,即使我只使用内置DI容器

    1.4K60
    领券