Asp.net MVC + EF + Spring.Net 項目實踐(四)

來源:互聯網
上載者:User

標籤:

這篇寫一寫如何使用Spring.net來解耦各個項目

1. 在介面層添加IStudentBLL檔案,裡面有GetStudent和GetAllStudents兩個方法;然後在StudentBLL類裡實現這兩個方法。此外還要在StudentManageSystem.ViewModel層添加StudentViewModel。

注意,此處使用了屬性StudentRepository,後期會用Spring.net將些屬性注入

  

2. 添加單元測試工作,為BLL層寫單元測試。此處引用了NSubstitute做為Mock工具,為BLL層隔離Repository層。具體的使用方法,可自行百度,此處不做解釋。

  

3. 引用Spring.net裡面的Spring.Core,為了能夠實現注入,需要重新實現IControllerFactory介面,如下

public class SpringControllerFactory : IControllerFactory    {        /// <summary>        /// Default ControllerFactory        /// </summary>        private static DefaultControllerFactory defalutf = null;        public IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)        {            //get spring context            //WebApplicationContext ctx = ContextRegistry.GetContext() as WebApplicationContext;            var ctx = ContextRegistry.GetContext();            string controller = controllerName + "Controller";            //尋找是否配置該Controller            if (ctx.ContainsObject(controller))            {                object controllerf = ctx.GetObject(controller);                return (IController)controllerf;            }            else            {                if (defalutf == null)                {                    defalutf = new DefaultControllerFactory();                }                return defalutf.CreateController(requestContext, controllerName);            }        }        public void ReleaseController(IController controller)        {            //get spring context            IApplicationContext ctx = ContextRegistry.GetContext();            if (!ctx.ContainsObject(controller.GetType().Name))            {                if (defalutf == null)                {                    defalutf = new DefaultControllerFactory();                }                defalutf.ReleaseController(controller);            }        }        public System.Web.SessionState.SessionStateBehavior GetControllerSessionBehavior(RequestContext requestContext, string controllerName)        {            return SessionStateBehavior.Default;        }    }
View Code

在Global.cs的Application_Start方法中設定控制器工廠,如下

4. 在web.config中配置Spring.net檔案

首先在configSections裡加入節點<sectionGroup>,內容如下,這個節點必須是排在第一位的

然後在與configSections並列的層級添加spring context,可以使用外部檔案(1),也可以使用內容節點(2)方式,我這裡是把配置節點放到了App_Data裡面了

objects檔案內容如下

<?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net">  <object id="HomeController" type="StudentManageSystem.Web.Controllers.HomeController, StudentManageSystem.Web" singleton="false">    <property name="StudentBll" ref="studentBll"></property>  </object>  <object id="studentBll" type="StudentManageSystem.Business.StudentBLL, StudentManageSystem.Business" scope="request">    <property name="StudentRepository" ref="studentRepository"/>  </object>  <!-- repository -->  <object name="smsDbContext" type="StudentManageSystem.Repository.SMSContext,StudentManageSystem.Repository" scope="request">    <constructor-arg name="connectionStringOrName" value="SMSContext">    </constructor-arg>  </object>  <object id="repositoryBase" abstract="true" scope="request">    <constructor-arg ref="smsDbContext"/>  </object>  <object name="studentRepository" type="StudentManageSystem.Repository.StudentRepository,StudentManageSystem.Repository" parent="repositoryBase" scope="request"/>  <object name="scoreRepository" type="StudentManageSystem.Repository.ScoreRepository,StudentManageSystem.Repository" parent="repositoryBase" scope="request"/>  <object name="gradeRepository" type="StudentManageSystem.Repository.GradeRepository,StudentManageSystem.Repository" parent="repositoryBase" scope="request"/>  <object name="subjectRepository" type="StudentManageSystem.Repository.SubjectRepository,StudentManageSystem.Repository" parent="repositoryBase" scope="request"/></objects>
View Code

 

5. 在Web層Views/Home添加Student視圖,然後在HomeController裡添加對應的action。同樣也加入StudentBll屬性,為注入做準備

做好準備之後,F5運行,見證奇蹟的時刻到了……

呵呵,報錯了,看看什麼原因?是spring沒有找到StudentRepository類庫,無法執行個體化。將StudentManageSystem.Repository項目的產生路徑改到StudentManageSystem.Web/bin目錄下,重新F5運行起來~~~

 

產生成功,StudentBll已經注入成功,並且能從資料庫裡取出內容,如下。

 

好了,就到這裡吧,拋個磚,希望能引出玉來,哈哈~~~裡面有些說明不清楚的地方請大家包涵,歡迎討論。

代碼:http://pan.baidu.com/s/1o6Lu6Fo

 

PS:硬廣,本人正準備換工作,如果有親需要MVC方面的人,可以聯絡我。

簡介:8年以前.net BS開發經驗,MVC4年+,WCF2年+,jQuery6年+;3年以上管理經驗,帶過10人左右的團隊;對品質有較高的要求。地點:北京

連絡方式:junior_ya@163.com,或者回複連絡方式,我給您發簡曆,謝謝大家。

Asp.net MVC + EF + Spring.Net 項目實踐(四)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.