一、什麼是控制反轉和依賴注入呢?
IOC(inversion of control)控制反轉模式;控制反轉是將組件間的依賴關係從程序內部提到外部來管理; 創建對象的權利由開發人員自己控制New。轉到由容器控制。
DI(dependency injection)依賴注入模式;依賴注入是指將組件的依賴通過外部以參數或其他形式注入; 通過容器來創建對象的時候,在對象的初始化時可以給一些屬性、構造函數的參數等注入默認值(可以是複雜類型)。
打個比方,我們在項目中會把業務邏輯抽出放於BLL層的各個IService和Service中。控制器調用Service時必須要先實例化Service,也就是要nwe對象。控制反轉則將new對象的工作交由容器執行,可以理解爲抽象工廠,從而實現解耦。
實現IOC和DI的第三方容器有很多:Spring.NET、Unity等等,今天我們使用到的是Spring.NET。這裏就不對Spring.NET做過多的介紹。
二、項目中引用Spring.NET
1.先導入dll文件,可以從NuGet中安裝,搜索Spring.Core
2.配置Spring.net
打開web.config文件在configuration節點下添加
<configSections>
<!-- Spring 的配置 -->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects>
<object name="StudentService" type="lxlStudy.BLL.StudentService,lxlStudy.BLL">
</object>
</objects>
</spring>
name="StudentService"表示我要創建的對象名爲“StudentService”,
type="lxlStudy.BLL.StudentService,lxlStudy.BLL"。注意中間有逗號隔開,逗號前面表示我要創建lxlStudy.BLL命名空間下的StudentService對象。逗號後面表示程序集爲“StudentService,lxlStudy.BLL”。
三、程序中創建容器
在我們剛纔需要New對象的地方加入兩行代碼
public static IApplicationContext ctx = ContextRegistry.GetContext();
IStudentService Lister = (IStudentService)ctx.GetObject("StudentService");
代碼中的IStudentServic和StudentServic換成自己需要的對象即可。
程序成功運行說明Spring.NET配置成功,程序實現了控制反轉