首页 新闻 会员 周边

初学使用Spring.Net Asp.Net MVC5 控制器注入问题。

0
悬赏园豆:20 [已解决问题] 解决于 2016-09-14 21:19

现在运行正常的代码:

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,有些地方还不是很明白,求解答 。

DZCMS的主页 DZCMS | 初学一级 | 园豆:5
提问于:2016-09-01 20:56
< >
分享
最佳答案
0

QY.CMS.MVC5.WEB.Areas.Manager.Controllers.BaseAdm

这里写base肯定注入不了。当前type是admincontroller,你配置的是base。

spring .net不知道哈,你查一下api文档,配置某个命名空间下或者包含某些名字的所有class注入,应该有类似的配置。记得java是有的

 

收获园豆:20
czd890 | 专家六级 |园豆:14412 | 2016-09-01 23:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册