验证Unity依赖注入的对象是否为同一个实例

在使用Unity的时候,能够很好的解耦,解除层与层之间的依赖性。这里有一个问题,每次向Unity中要对象实例的时候,这时候给出的是同一个吗?还是每次都是new一个新的?我来写代码验证一下。怎么验证两个对象是否为同一个呢,看这个对象在内存中的地址就行了,通过Hash码查看就可以。

namespace UnityApplication
{
    public interface IService
    {
        string Show();
    }
}

namespace UnityApplication
{
    public class Service : IService
    {
        public Service()
        {
            Console.WriteLine("<<<<<<<<<<<<<<");
        }

        public string Show()
        {
            return "Hello";
        }
    }
}

namespace UnityApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            IUnityContainer container = CreateUnityContainerExe();
            IService service = container.Resolve<IService>();
            string result = service.Show();
            Console.WriteLine("''''''''''" + result + "llllllll" + service.GetHashCode());
            IService service2 = container.Resolve<IService>();
            Console.WriteLine("lllllllllll" + service2.GetHashCode());
            Console.ReadLine();
        }

        public static IUnityContainer CreateUnityContainerExe()
        {

            return CreateUnityContainer(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));
        }  

        private static IUnityContainer CreateUnityContainer(Configuration configuration)
        {

                return InitializeContainer(configuration);
            }  

        private static IUnityContainer InitializeContainer(Configuration configuration)
        {
            var result = new UnityContainer();

            foreach (var section in configuration.Sections)
            {
                var unityConfigurationSection = section as UnityConfigurationSection;
                if (unityConfigurationSection != null)
                {
                    result.LoadConfiguration(unityConfigurationSection);
                }
            }

            return result;
        }
    }
}

需要在配置文件中,配置相应的类与映射关系

<?xml version="1.0"?>
<configuration>

  <configSections>

    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>

  </configSections>

  <unity>
    <container>
      <register type="UnityApplication.IService, UnityApplication" mapTo="UnityApplication.Service, UnityApplication">
      </register>
    </container>
  </unity>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
</configuration>

最终运行的时候,你会发现控制台输出的哈希地址根本就是不一样的,说明不是同一个实例,对象的地址根本不同,每次都会new一个新的。

验证Unity依赖注入的对象是否为同一个实例

时间: 2024-10-12 17:37:56

验证Unity依赖注入的对象是否为同一个实例的相关文章

WPF PRISM开发入门二(Unity依赖注入容器使用)

这篇博客将通过一个控制台程序简单了解下PRISM下Unity依赖注入容器的使用.我已经创建了一个例子,通过一个控制台程序进行加减乘除运算,项目当中将输入输出等都用接口封装后,结构如下: 当前代码可以点击这里下载. 运行效果如下: 下面将引入Unity类库,使用Unity来生成需要的对象实例. 先查看一下CalculateRelpLoop类, public class CalculateRelpLoop : ICalculateRelpLoop { ICalculateService _calcu

Unity 依赖注入

关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引用Microsoft.Practices.Unity.dll和Microsoft.Practices.Unity.Configuration.dll,下面我们就一步一步的学习下Unity依赖注入的详细使用.如果不明白什么是控制反转和依赖注入,请参考控制反转和依赖注入模式 下面通过一个示例来讲解Uni

Unity依赖注入使用详解

Unity依赖注入使用详解 写在前面 构造器注入 Dependency属性注入 InjectionMethod方法注入 非泛型注入 标识键 ContainerControlledLifetimeManager单例 Unity注册配置问题 Unity的app.config节点配置 后记 关于 控制反转 (Inversion of Control)和 依赖注入 (Dependency Injection)大家网上可以找下相关概念,在 <小菜学习设计模式(五)—控制反转(Ioc)> 这篇文章中本人也

使用Unity依赖注入的时候,最上层的类是Resolve还是New的问题

在使用Unity的时候,很多时候是这样一种引用的关系.就是一个类需要另一个类在其中做工具类.因为是构造方法注入,所以要在构造方法中加入一个引用参数. public interface IRepository { void Execute(); } public class Repository : IRepository { public void Execute() { // Some database operation } } public interface IService { voi

使用Microsoft.Practices.Unity 依赖注入

Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入(Constructor Injection).属性注入(Property Injection),以及方法调用注入(Method Call Injection). 假设我们有下面的场景代码,在代码里面有一个很简单的customer对象,customer 对象有个save 方法, 这个方法通过调用ICusto

c# Unity依赖注入WebService

1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之 间高耦合,难于测试:有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活.其实IoC 对编程带来的最大改变不是

WebApi学习笔记06:使用webapi模板--仓储模式--Unity依赖注入

1.Web项目 1.1概述 对数据操作封装使用存储模式是很常见的方式,而使用依赖注入来降低耦合度(方便创建对象,可以抛弃经典的工厂模式)…… 1.2创建项目 1.3添加模型 在Models下,添加Product.cs: namespace WebApi06.Models { public class Product { public int ID { get; set; } public string Name { get; set; } public decimal Price { get;

依赖注入与对象间关系

依赖注入(DI)是控制反转(IoC)的一种方式.目前,在.NET和Java领域已经有相当多基于DI思想的对象容器,如:Spring,Unity等.本文试图避免重复性地介绍DI基础知识和DI容器的使用,而是希望深一层探讨DI的本质和对象间关系,以达到合理设计避免滥用DI的目的. 依赖注入 vs 创建对象 有不少地方这样描述:"依赖注入改变了使用对象前先创建的传统方式,而是从外部注入依赖的对象".这样的描述其实似是而非,先来看一个例子: interface ICar{     void R

Unity依赖注入

一.简介 Unity是一个轻量级的可扩展的依赖注入容器,支持构造函数,属性和方法调用注入.Unity可以处理那些从事基于组件的软件工程的开发人员所面对的问题.构建一个成功应用程序的关键是实现非常松散的耦合设计. 二.使用 1.安装 Unity插件. 进入NuGet,输入Unity.在相应的项目安装. 2.config中代码配置. 在configSections中加入    <section name="unity" type="Microsoft.Practices.U