1 /* 2 * 演示Unity 注入 3 * */ 4 using Microsoft.Practices.Unity; 5 using System; 6 7 namespace Unity.Property.Inject 8 { 9 class Program 10 { 11 public static IUnityContainer container; 12 13 static void Main(string[] args) 14 { 15 container = new UnityContainer(); 16 17 //PropertyInject(); 18 //ConstructorInject(); 19 MethodInject(); 20 21 Console.ReadLine(); 22 } 23 24 /// <summary> 25 /// 构造注入 26 /// </summary> 27 static void ConstructorInject() 28 { 29 Console.WriteLine("构造注入"); 30 container.RegisterType<ILog, ALog>(); 31 //container.RegisterType<ILog, BLog>(); 32 33 container.RegisterType<IPeople, Man>(); 34 //container.RegisterType<IPeople, Woman>(); 35 36 var people = container.Resolve<IPeople>(); 37 people.Print2(); 38 } 39 40 /// <summary> 41 /// 属性注入 42 /// </summary> 43 static void PropertyInject() 44 { 45 Console.WriteLine("属性注入"); 46 //通过Register不同的ILog的派生类型,达到用不同的日志组件进行打印 47 48 //container.RegisterType<ILog, ALog>(); 49 container.RegisterType<ILog, BLog>(); 50 51 container.RegisterType<IPeople, Man>(); 52 //container.RegisterType<IPeople, Woman>(); 53 54 var people = container.Resolve<IPeople>(); 55 people.Print(); 56 } 57 58 static void MethodInject() 59 { 60 Console.WriteLine("函数注入"); 61 //通过Register不同的ILog的派生类型,达到用不同的日志组件进行打印 62 63 //container.RegisterType<ILog, ALog>(); 64 container.RegisterType<ILog, BLog>(); 65 66 container.RegisterType<IPeople, Man>(); 67 //container.RegisterType<IPeople, Woman>(); 68 69 var people = container.Resolve<IPeople>(); 70 people.Logger.Write("函数注入 " + people.Logger != null ? "成功" : "失败"); 71 } 72 } 73 74 public interface IPeople 75 { 76 /// <summary> 77 /// 属性注入用 78 /// </summary> 79 ILog Logger { get; set; } 80 81 /// <summary> 82 /// 构造注入用 83 /// </summary> 84 ILog Logger2 { get; set; } 85 86 String Name { get; set; } 87 88 String Sex { get; set; } 89 90 /// <summary> 91 /// 属性注入用 92 /// </summary> 93 void Print(); 94 95 /// <summary> 96 /// 构造注入用 97 /// </summary> 98 void Print2(); 99 100 /// <summary>101 /// 函数注入用102 /// </summary>103 void Print3(ILog logger);104 }105 106 public class Man : IPeople107 {108 [Dependency]109 public ILog Logger { get; set; }110 public ILog Logger2 { get; set; }111 112 public string Name { get; set; }113 114 public string Sex { get; set; }115 116 public Man(ILog logger2) { this.Logger2 = logger2; }117 118 public void Print()119 {120 Logger.Write(base.ToString());121 }122 123 public void Print2()124 {125 Logger.Write(base.ToString());126 }127 128 [InjectionMethod]129 public void Print3(ILog logger)130 {131 this.Logger = logger;132 }133 }134 135 public class Woman : IPeople136 {137 138 [Dependency]139 public ILog Logger { get; set; }140 public ILog Logger2 { get; set; }141 142 public string Name { get; set; }143 144 public string Sex { get; set; }145 146 public Woman(ILog logger2) { this.Logger2 = logger2; }147 148 public void Print()149 {150 Logger.Write(base.ToString());151 }152 153 public void Print2()154 {155 Logger.Write(base.ToString());156 }157 158 [InjectionMethod]159 public void Print3(ILog logger)160 {161 this.Logger = logger;162 }163 }164 165 166 public interface ILog167 {168 void Write(String msg);169 }170 171 public class ALog : ILog172 {173 public void Write(String msg) { Console.WriteLine("[A] {0}", msg); }174 }175 176 public class BLog : ILog177 {178 public void Write(String msg) { Console.WriteLine("[B] {0}", msg); }179 }180 }