您的位置:首页 > 其它

IOC框架Ninject实践总结

2013-09-15 17:38 232 查看

一、控制反转和依赖注入

Ninject是一个轻量级的基于.Net平台的依赖注入(IOC)框架。所谓的IOC,即控制反转(Inversion of Control),它是一个经典的面向对象编程法则,它的作用主要是用来帮助应用程序解耦,并把程序分离成一个个松耦合高内聚的模块。控制反转还有一个名字叫依赖注入(Dependency Injection),简称DI。

二、快速无xml配置注入

1、定义应用程序Module

BaseControllerusing System.Web.Mvc;
using LogService;
using Ninject;
using UserService;
using UserService.Model;

namespace MVCApp.Helper
{
[ExceptionHandle]
public class BaseController : Controller
{
/// <summary>
/// 构造函数
/// </summary>
public BaseController()
{
if (CurrentLogService==null)
{
using (var kernel = new StandardKernel(new ServiceModule()))
{
var logger = kernel.Get<ILogService>();
logger.AppendLog("As you see,in constructor log service is not initilized by inject attribute.");
}
}
}

protected UserInfo CurrentUser
{
get { return CurrentUserService.CurrentUser; }
}

#region 服务

[Inject]
public IUserService CurrentUserService { get; set; }

[Inject]
public ILogService CurrentLogService { get; set; }

#endregion
}
}


然后,在相应的Controller下this点服务属性名调用一下,多么优雅干净简洁。但是这种方式有一点需要特别需要注意,在Controller的构造函数里调用服务初始化一些数据可能不能让你那么随心所欲,因为在构造函数内,服务还没有初始化。

如上代码所示,通过Inject特性实现服务注入,通过继承实现公共服务调用,不管哪种表现形式的应用程序都可以使用,有AOP和继承的世界看上去是多么美好啊。当然了,具体使用哪种方式好每个人肯定都有自己的看法,实际项目中,我们通常选择组合和继承相结合的方式,这样就可以兼顾两者的优点实现注入。

最后还有几个困扰人的问题需要思考:如何划分服务?服务和服务之间是否应该依赖注入?如果仅仅是在表现层实现依赖注入,难道不觉得IOC的作用有点太酱油了吗?

参考:http://www.ninject.org/wiki.html

https://github.com/ninject/

http://ninject.codeplex.com/

/article/5369165.html

http://martinfowler.com/articles/injection.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: