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 : IPeople 107 { 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 : IPeople 136 { 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 ILog 167 { 168 void Write(String msg); 169 } 170 171 public class ALog : ILog 172 { 173 public void Write(String msg) { Console.WriteLine("[A] {0}", msg); } 174 } 175 176 public class BLog : ILog 177 { 178 public void Write(String msg) { Console.WriteLine("[B] {0}", msg); } 179 } 180 }