现在运行正常的代码:
AdminController:
1 public class AdminController : Controller 2 { 3 #region 00.Spring.Net 属性注入 4 public ISysConfigBLL sysConfigBLL { get; set; } 5 public ISiteBLL siteBLL { get; set; } 6 public IAreaBLL areaBLL { get; set; } 7 public IFilterWordBLL filterWordBLL { get; set; } 8 9 #endregion 10 11 #region 01.管理首页 12 /// <summary> 13 /// 管理首页 14 /// </summary> 15 /// <returns></returns> 16 public ActionResult Index() 17 { 18 return View(); 19 } 20 public ActionResult Layout() 21 { 22 return View(); 23 } 24 25 26 #endregion 27 28 #region 02.1系统平台之平台配置管理 29 /// <summary> 30 /// 系统配置列表 31 /// </summary> 32 /// <returns></returns> 33 public ActionResult SysConfig_List() 34 { 35 SysConfigModel model = sysConfigBLL.GetModel(); 36 return View(model); 37 } 38 39 /// <summary> 40 /// 修改系统配置 41 /// </summary> 42 /// <param name="model"></param> 43 /// <returns></returns> 44 [HttpPost] 45 public ActionResult SysConfig_Edit(SysConfigModel model) 46 { 47 if (!ModelState.IsValid) 48 { 49 return View(model); 50 } 51 if (!Directory.Exists(Server.MapPath("~/" + model.SitesDir.ToLower()))) 52 { 53 Directory.CreateDirectory(Server.MapPath("~/" + model.SitesDir.ToLower())); 54 } 55 sysConfigBLL.Update(model); 56 return RedirectToAction("SysConfig_List"); 57 } 58 #endregion
Spring.Net 注入文件代码controllers.xml:
1 <object type="QY.CMS.MVC5.WEB.Areas.Manager.Controllers.AdminController, QY.CMS.MVC5.WEB" singleton="false" > 2 <property name="sysConfigBLL" ref="sysConfigBLL" /> 3 <property name="siteBLL" ref="siteBLL" /> 4 <property name="areaBLL" ref="areaBLL" /> 5 <property name="filterWordBLL" ref="filterWordBLL" /> 6 </object>
Admin控制器是我的后台管理控器,所以我要用到各个BLL。
但是这样有一个不好的地方,如果我又添加了一个Test控制器,也要用到各个BLL,是不是要把controllers.xml文件中的代码又要复制一份呢?控制器不多还好,如果我有很多控制器,那controllers.xml文件是不是会变得非常大。
所以我就把注入的属性都放到一个BaseController基控制器中,让其它控制器继存它,以达到复用目的。
1 public class BaseController : Controller 2 { 3 #region 00.Spring.Net 属性注入 4 public ISysConfigBLL sysConfigBLL { get; set; } 5 public ISiteBLL siteBLL { get; set; } 6 public IAreaBLL areaBLL { get; set; } 7 public IFilterWordBLL filterWordBLL { get; set; } 8 9 #endregion 10 }
,然后AdminController继存BaseControllrer,并且将controllers.xml的代码修改为:
1 <object type="QY.CMS.MVC5.WEB.Areas.Manager.Controllers.BaseAdminController, QY.CMS.MVC5.WEB" singleton="false" > 2 <property name="sysConfigBLL" ref="sysConfigBLL" /> 3 <property name="siteBLL" ref="siteBLL" /> 4 <property name="areaBLL" ref="areaBLL" /> 5 <property name="filterWordBLL" ref="filterWordBLL" /> 6 </object>
最后AdminController变成这样:
1 public class AdminController : BaseController 2 { 3 #region 01.管理首页 4 /// <summary> 5 /// 管理首页 6 /// </summary> 7 /// <returns></returns> 8 public ActionResult Index() 9 { 10 return View(); 11 } 12 public ActionResult Layout() 13 { 14 return View(); 15 } 16 17 18 #endregion 19 20 #region 02.1系统平台之平台配置管理 21 /// <summary> 22 /// 系统配置列表 23 /// </summary> 24 /// <returns></returns> 25 public ActionResult SysConfig_List() 26 { 27 SysConfigModel model = sysConfigBLL.GetModel(); 28 return View(model); 29 } 30 31 /// <summary> 32 /// 修改系统配置 33 /// </summary> 34 /// <param name="model"></param> 35 /// <returns></returns> 36 [HttpPost] 37 public ActionResult SysConfig_Edit(SysConfigModel model) 38 { 39 if (!ModelState.IsValid) 40 { 41 return View(model); 42 } 43 if (!Directory.Exists(Server.MapPath("~/" + model.SitesDir.ToLower()))) 44 { 45 Directory.CreateDirectory(Server.MapPath("~/" + model.SitesDir.ToLower())); 46 } 47 sysConfigBLL.Update(model); 48 return RedirectToAction("SysConfig_List"); 49 } 50 #endregion
以后不管加多少个控制器都我只要继存BaseController这个控制器就能使用各个BLL。
以上代码有点多主要关注红色部分。
修改前后的主要区别就是controllers.xml中控制器不一样,修改前是注入到AdminController,修改后是注入到BaseController。
但是经这样修改的代码,发现根本注入不了。如果将controllers.xml修改为AdminController,不管把属性放到AdminController还是放到BaseController都可以注入。
我也是初学Spring.Net,有些地方还不是很明白,求解答 。
QY.CMS.MVC5.WEB.Areas.Manager.Controllers.BaseAdm
这里写base肯定注入不了。当前type是admincontroller,你配置的是base。
spring .net不知道哈,你查一下api文档,配置某个命名空间下或者包含某些名字的所有class注入,应该有类似的配置。记得java是有的