这样,Service\config 下面的xml如何配置,大家知道如何使用了吧。那我们再来看下webpage\config 里面的xml配置,我们以Controllers.xml为例:
我们看下格式:
<!--登录控制器-->
<object type="WebPage.Areas.SysManage.Controllers.AccountController,WebPage" singleton="false">
<property ref="Service.User"/>
<property ref="Service.UserOnlineManage"/>
</object>
<!--登录控制器-->
<object type="控制器,WebPage" singleton="false">
<property ref="在配置Service\config时定义的id"/>
<property ref="在配置Service\config时定义的id"/>
</object>
首先,我们添加一个object标签 type 我们的控制器
<object type="WebPage.Areas.SysManage.Controllers.AccountController,WebPage" singleton="false">
</object>
然后,我们这里需要用到两个接口:一个是用户管理,一个是用户在线状态
那么我们添加两个 property标签:
<property ref="Service.User"/>
<property ref="Service.UserOnlineManage"/>
注意:这里property 的属性 name 的值 要跟控制器里声明的容器的名称一致
这样,就实现了。然后,有朋友问,一定要这么复杂的配置么?其实,service\config里配置完,在webpage\config里不配置也是可以的,那么不配置Controllers.xml 如何调用呢?细心的朋友可能已经发现了,我们在BaseCotroller控制器里就没有使用xml配置,在webpages\Models\CommonHelper.cs中也没有使用xml配置:
对于Spring的使用,详细的讲解和专业的术语如何表述,请大家移步度娘。
我们再来看下大家也是有很多问题的UserManage实现类://用户登录验证
public Domain.SYS_USER UserLogin(string useraccount, string password) 这个应该没什么可讲的,大家都一目了然。
//是否为超级管理员
public bool IsAdmin(int userId) 这个就一点说明一下 return roles.ToList().Any(item => item.ID == ClsDic.DicRole["超级管理员"]) 这里是用到了字典(是不是比较鸡肋),我们在应用类库Common下的Enums.cs中有这么一个
也是就判断我们当前登录用户的ID是否等于我们定义的超级管理员的ID。
然后,我们再来看下 public Account GetAccountByCookie() 和 public bool Remove(int userId) 这两个是一样的,这两个都调用了外部接口,我们看下我们这个类的开始部分
大家是不是在使用的时候会出现这么一个错误:未将对象引用到实例?
包括在控制中,我们调用接口的时候,出现这个错误,大部分的原因就是:没有注入。
控制器的注入我们上面刚刚讲过了,我们看下接口调用外部接口是如何注入的。service\config\service.xml