程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Unity依賴注入--構造器注入

Unity依賴注入--構造器注入

編輯:關於.NET

最近准備用Unity來改良系統。

做了一些小測試,拿出來與大家分享一下。

01 using System;
02 using System.Text;
03 using System.Collections.Generic;
04 using System.Linq;
05 using Microsoft.VisualStudio.TestTools.UnitTesting;
06 using Microsoft.Practices.Unity;
07 using System.Diagnostics;
08
09 namespace MyTest
10 {
11
12     [TestClass]
13     public class UnitTest1
14     {
15
16         IUnityContainer mContainer;
17         [TestInitialize()]
18         public void MyTestInitialize() {
19             mContainer = new UnityContainer();
20         }
21
22         class DependencyObject
23         {
24             public string Value { get; set; }
25         }
26
27         class LogicObject
28         {
29             private readonly DependencyObject mDependency;
30             public LogicObject(DependencyObject dependency)
31             {
32                 mDependency = dependency;
33             }
34
35             public DependencyObject Dependency
36             {
37                 get { return mDependency; }
38             }
39         }
40
41         [TestMethod]
42         public void TestNormal()
43         {
44             var dependency = new DependencyObject();
45             dependency.Value = "Dependency";
46
47             var logicObj = new LogicObject(dependency);
48
49             Assert.AreSame(logicObj.Dependency, dependency);
50         }
51
52         [TestMethod]
53         public void TestUnityContainer()
54         {
55             var dependency = new DependencyObject();
56             dependency.Value = "Dependency";
57
58             mContainer.RegisterInstance(typeof(DependencyObject), dependency);
59             mContainer.RegisterType<LogicObject>();
60
61             var logicObj = mContainer.Resolve<LogicObject>();
62
63             Assert.AreSame(logicObj.Dependency, dependency);
64         }
65     }
66 }

TestNormal展示了傳統的對象構造方式

TestUnityContainer展示了使用Unity後,對象的構造方式。

在當前的編程實踐中,對象之間的依賴性變得復雜,要構造一個對象已經不是一件簡單的事情,例如上面的例子,LogicObject對 DependencyObject有依賴,所以在構造LogicObject之前,還不得不構造DependencyObject。而現實的情況可能還要復雜,DependencyObject本身可能也依賴於其它對象。所以要構造LogicObject變得更加復雜。為了解決這個問題,誕生了很多依賴注入框架。Unity就是其中一種,不過它也是通過ObjectBuilder來實現的。

說到這裡,很多人會質疑這種自動構造的過程,認為這個過程難以控制。就像TestNormal一樣,在構造LogicObject時,我們可以從代碼上了解到LogicObject對DependencyObject有依賴。而在TestUnityContainer中,這種依賴就不明顯。

關於這個問題,我不能回避,我會在今後討論它。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved