unity的依赖注入

参考文档

http://www.cnblogs.com/zhangchenliang/archive/2013/01/08/2850970.html

http://www.tuicool.com/articles/yiUzQj

IUnityContainer container = new UnityContainer();

            #region 1.0 注册类型
            container.RegisterType<IKiss, Boy>();
            var boy = container.Resolve<IKiss>();
            Girl gril = new Girl(boy);          
            #endregion

            #region 2.0 注册实例
            Boy boy2 = new Boy();
            container.RegisterInstance<IKiss>(boy2);
            var boy3 = container.Resolve<IKiss>();
            Girl gril1 = new Girl(boy3);          
            #endregion

            #region 3.0 单例模式
            /*boy4和boy5的属性dt相同,
             * 可以证明是单例*/
            container.RegisterType<IKiss, Boy>(new ContainerControlledLifetimeManager());
            var boy4 = container.Resolve<IKiss>();
            var boy5 = container.Resolve<IKiss>(); 
            #endregion


            #region 4.0 配置文档配置注册和解析
            IUnityContainer container1 = new UnityContainer();
            UnityConfigurationSection configuration = ConfigurationManager.GetSection(UnityConfigurationSection.SectionName)
                as UnityConfigurationSection;
            configuration.Configure(container1, "defaultContainer");
            var boy6 = container1.Resolve<IKiss>(); 
            #endregion

            #region 5.0 带名称的注册和解析
            container.RegisterType<IKiss, Boy>("boy");
            container.RegisterType<IKiss, Boy1>("boy1");
            var boy7 = container.Resolve<IKiss>("boy1"); 
            var list=container.ResolveAll<IKiss>();
            #endregion
 public interface IKiss
    {
        void Kiss();
    }

    public class Girl 
    {
        public IKiss boy;
        public Girl(IKiss boy)
        { this.boy = boy; }
        public void Kiss()
        {
            this.boy.Kiss();
            Console.WriteLine("girl is kissing");
        }
    }

    public class Boy : IKiss
    {
        public Boy()
        {
            this.dt = DateTime.Now;
        }
        public DateTime dt { get; set; }
        public void Kiss()
        {
            Console.WriteLine("boy is kissing");
        }
    }

    public class Boy1 : IKiss
    {
        public Boy1()
        {
            this.dt = DateTime.Now;
        }
        public DateTime dt { get; set; }
        public void Kiss()
        {
            Console.WriteLine("boy1 is kissing");
        }
    }
<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>

  <unity>
    <containers>
      <container name="defaultContainer">
        <register type="DI.IKiss,DI" mapTo="DI.Boy,DI"/>
      </container>
    </containers>
  </unity>
</configuration>

四种注入方式

 public interface IPeople { void Live();}
    public interface IEat { void Eat();}
    public interface ISleep { void Sleep(); }
    public interface IPlay { void Play();}

    public class PlayBoy : IPeople
    {
        //构造函数注入
        public IEat PEat { get; set; }

        //属性注入
        [Dependency]
        public ISleep PSleep { get; set; }

        public IPlay PPlay { get; set; }

        public PlayBoy(IEat eat)
        { this.PEat = eat; }

        [InjectionMethod]
        public void Initialize(IPlay play)
        { this.PPlay = play; }


        public void Live()
        {

            this.PEat.Eat();
            this.PSleep.Sleep();
            this.PPlay.Play();
            Console.WriteLine("playboy is walking");
        }
    }
    public class BoyEat : IEat
    {
        public void Eat()
        {
            Console.WriteLine("eat rice and meat");
        }
    }
    public class BoySleep : ISleep
    {
        public void Sleep()
        {
            Console.WriteLine("sleep at 12:00 and wake up at 8:00");
        }
    }
    public class BoyPlay : IPlay
    {
        public void Play()
        {
            Console.WriteLine("play war3 and dota");
        }
    }

注册和解析

  IUnityContainer container = new UnityContainer();
            container.RegisterType<IPeople, PlayBoy>();
            container.RegisterType<IEat, BoyEat>();
            container.RegisterType<ISleep, BoySleep>();
            container.RegisterType<IPlay, BoyPlay>();

            var p = container.Resolve<IPeople>();
            p.Live();
原文地址:https://www.cnblogs.com/tgdjw/p/4680343.html