unity 三种注入示例

  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 }

 

posted @ 2015-01-11 13:09  哑吧湖大水怪  阅读(1074)  评论(0编辑  收藏  举报