首页
学习
活动
专区
工具
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...在这段配置中,定义了一个名称为defaultContainer的Unity容器,并在其中完成了上面定义的接口和对应实现类之间映射的类型匹配。 1: 调用它的泛型的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.使用配置文件配置注入 但是,我们显然不满足于这样,我们还想把实现,彻彻底底的从代码中移除,这里我们就可以借助配置文件来实现了。...,那么父容器与子容器中的对象都是单例的,但是子类与父类里的对象不是同一个;

    67610

    Unity 依赖注入

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

    1.3K80

    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: <?

    69570

    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类的。

    21620

    你知道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

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

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

    98890

    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

    控制反转和依赖注入模式

    上图是最基本的三层框架,具体的流程如下: 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();//将创建完的实例注入到对应的业务类中

    668100

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

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

    1.5K60

    C#设计模式之策略模式

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

    83150

    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的子容器。

    73640

    IOC编程

    开放/封闭原则: 添加任何新行为,应该是扩展到新类中,而不应该直接修改原来运行良好的代码。 3. 李式替代原则: 类型T的对象可以用其子类型的对象替换,程序可以正常运行。 4....TenantStore类中的特定构造函数会和所有的客户端代码紧密绑定在一起,可能会导致更改TenantStore类的实现,这会让TenantStore类的维护更复杂,更容易出错,并且更耗时。 2....它可以最大限度地减少您需要编写的类型注册的数量。您可以指示Unity容器扫描一组程序集,然后根据一组规则自动注册多个映射,而不是单独指定每个类型映射。如果你有很多类型要注册,它将为你节省大量的工作。...创建IOCAutowire的独立类库: 依赖的包:Unity public class AutowireInfo : IComparable { public AutowireInfo...AutowireRegister>(); autowireRegister.AutoRegist(); return container; } } 创建引用IOCAutowire类库的示例代码

    65330
    领券