• Unity依赖注入使用


    构造器注入(Constructor Injection):IoC容器会智能地选择选择和调用适合的构造函数以创建依赖的对象。如果被选择的构造函数具有相应的参数,IoC容器在调用构造函数之前会自定义创建相应参数对象;

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //1.创建一个UnityContainer对象
                //2.通过UnityContainer对象的RegisterType方法来注册对象与对象之间的关系
                //3.通过UnityContainer对象的Resolve方法来获取指定对象关联的对象
                UnityContainer container = new UnityContainer();//创建容器
                container.RegisterType<IWaterTool, PressWater>();//注册依赖对象 默认注册(无命名),如果后面还有默认注册会覆盖前面的
                container.RegisterType<IWaterTool, PressWater>("PressWater1");  //命名注册
                IWaterTool water = container.Resolve<IWaterTool>();
                IWaterTool water1 = container.Resolve<IWaterTool>("PressWater1");
                Console.WriteLine(water.returnWater());
                Console.WriteLine(water1.returnWater());   
                Console.Read();
            }
        }
    
        /// <summary>
        /// 压水井
        /// </summary>
        public class PressWater : IWaterTool
        {
            public string returnWater()
            {
                return "地下水好甜啊!!!";
            }
        }
    
        /// <summary>
        /// 获取水方式接口
        /// </summary>
        public interface IWaterTool
        {
            string returnWater();
        }
    }
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                //1.在配置文件<configSections> 配置节下注册名为unity的section
                //2.在<configuration> 配置节下添加Unity配置信息
                //3.在代码中读取配置信息,并将配置载入到UnityContainer中
                IUnityContainer container = new UnityContainer();
                container.LoadConfiguration("MyContainer");
                UnityConfigurationSection section
                  = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");//获取指定名称的配置节   
                section.Configure(container, "MyContainer");//获取特定配置节下已命名的配置节<container name='MyContainer'>下的配置信息
    
                IWaterTool water = container.Resolve<IWaterTool>("PressWater");
                Console.WriteLine(water.returnWater());
                Console.Read();
            }
        }
    
        /// <summary>
        /// 压水井
        /// </summary>
        public class PressWater : IWaterTool
        {
            public string returnWater()
            {
                return "地下水好甜啊!!!";
            }
        }
    
        /// <summary>
        /// 获取水方式接口
        /// </summary>
        public interface IWaterTool
        {
            string returnWater();
        }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <configSections>
        <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
      </configSections>
    
      <unity>
        <!--定义类型别名-->
        <aliases>
          <add alias="IWaterTool" type="ConsoleApplication1.IWaterTool,ConsoleApplication1" />
          <add alias="PressWater" type="ConsoleApplication1.PressWater,ConsoleApplication1" />
        </aliases>
        <!--容器-->
        <container name="MyContainer">
          <!--映射关系-->
          <register type="IWaterTool"  mapTo="PressWater" name="PressWater"></register>
        </container>
      </unity>
    
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
      </startup>
    </configuration>


    属性注入(Property Injection):如果需要使用到被依赖对象的某个属性,在被依赖对象被创建之后,IoC容器会自动初始化该属性;

        class Program
        {
            static void Main(string[] args)
            {
                UnityContainer container = new UnityContainer();
                container.RegisterType<IPeople, VillagePeople>();
                container.RegisterType<IWaterTool, PressWater>();
                IPeople people = container.Resolve<IPeople>();
                Console.WriteLine(people._pw.returnWater());
                people.DrinkWater();
                Console.Read();
            }
        }
    
        /// <summary>
        /// 压水井
        /// </summary>
        public class PressWater : IWaterTool
        {
            public string returnWater()
            {
                return "地下水好甜啊!!!";
            }
        }
    
        /// <summary>
        /// 获取水方式接口
        /// </summary>
        public interface IWaterTool
        {
            string returnWater();
        }
    
        /// <summary>
        /// 人接口
        /// </summary>
        public interface IPeople
        {
            IWaterTool _pw { get; set; }
            void DrinkWater();
        }
    
        /// <summary>
        /// 村民
        /// </summary>
        public class VillagePeople : IPeople
        {
            [Dependency]
            public IWaterTool _pw { get; set; }
            public VillagePeople(IWaterTool pw)
            {
                _pw = pw;
            }
            public void DrinkWater()
            {
                Console.WriteLine(_pw.returnWater());
            }
        }

    方法注入(Method Injection):如果被依赖对象需要调用某个方法进行相应的初始化,在该对象创建之后,IoC容器会自动调用该方法。

    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                UnityContainer container = new UnityContainer();
                container.RegisterType<IPeople, VillagePeople>();
                container.RegisterType<IWaterTool, PressWater>();
                IPeople people = container.Resolve<IPeople>();
                Console.WriteLine(people._pw.returnWater());
                people.DrinkWater();
                Console.Read();
            }
        }
    
        /// <summary>
        /// 压水井
        /// </summary>
        public class PressWater : IWaterTool
        {
            public string returnWater()
            {
                return "地下水好甜啊!!!";
            }
        }
    
        /// <summary>
        /// 获取水方式接口
        /// </summary>
        public interface IWaterTool
        {
            string returnWater();
        }
    
        /// <summary>
        /// 人接口
        /// </summary>
        public interface IPeople
        {
            IWaterTool _pw { get; set; }
            void DrinkWater();
            void ObjectInit();
        }
    
        /// <summary>
        /// 村民
        /// </summary>
        public class VillagePeople : IPeople
        {
            [Dependency]
            public IWaterTool _pw { get; set; }
            public VillagePeople(IWaterTool pw)
            {
                _pw = pw;
            }
            public void DrinkWater()
            {
                Console.WriteLine(_pw.returnWater());
            }
            [InjectionMethod]
            public void ObjectInit()
            {
                Console.WriteLine("方法注入");
            }
        }
    }
  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/5403747.html
Copyright © 2020-2023  润新知