最近在做Asp.Net MVC的项目时,抽空学习了一下Ninject Ioc注入, 之前用过微软的Unity Ioc注入,所以准备将这些Ioc注入整理起来.
1. Ninject是一个轻量级的基于.Net平台的依赖注入框架
Ninject下载:可以到这里打开Ninject的官网进行下载
最新源代码地址: http://github.com/ninject/ninject
用户向导:http://ninject.codeplex.com/wikipage?title=User%20Guide&referringTitle=Home
2. 模型与配置
(1)模型
View Code
public interface ILog
{
void Write(string message);
}
public class SystemLog : ILog
{
public void Write(string message)
{
Console.WriteLine("Target:SystemLog");
Console.WriteLine(String.Format("Message:{0}", message));
}
}
(2)配置注入接口
View Code
public class NinjectConfig : Ninject.Modules.NinjectModule
{
//set relationship.
public override void Load()
{
//1.绑定到接口的具体实现
Bind<ILog>().To<SystemLog>();
//Bind<ILog>().To<DatabaseLog>();
Bind<ISysLogService>().To<SysLogService>();
Bind<IDBLogService>().To<DBLogService>();
//2.自绑定
Bind<LogService>().ToSelf();
}
}
(3)创建注入管理容器
private static IKernel kernelObj = new StandardKernel(new NinjectConfig());
3. 注入方式
(1) 直接获取接口注入
//1.依赖接口注入
ILog logObj = kernelObj.Get<ILog>();
Console.WriteLine("依赖接口注入-----------------");
logObj.Write("Hello Ninject!");
Console.WriteLine("");
(2) 构造函数注入
View Code
public class SysLogService : ISysLogService
{
//构造函数注入
private ILog _LogInstance;
public SysLogService() { }
/// <summary>
/// 2.构造函数注入
/// </summary>
/// <param name="tempInstance"></param>
[Inject] //指定注入的构造函数
public SysLogService(ILog log)
{
_LogInstance = log;
}
public void WriteLog(string message)
{
if (_LogInstance == null)
{
Console.WriteLine("_LogInstance 为空, 没有被注入.");
return;
}
_LogInstance.Write("_LogInstance已被注入:" + message);
}
}
(3)属性注入
View Code
public class LogService
{
//属性注入
public ILog _LogInstance { get; set; }
public void WriteLog(string message)
{
if (_LogInstance == null)
{
Console.WriteLine("_LogInstance 为空, 没有被注入.");
return;
}
_LogInstance.Write("_LogInstance已被注入:" + message);
}
}
View Code
//3.属性注入/
Console.WriteLine("属性注入-----------------");
LogService logServiceObj3 = new LogService() { _LogInstance = kernelObj.Get<ILog>() };
logServiceObj3.WriteLog("Hello Ninject!");
//OR
LogService logServiceObj31 = kernelObj.Get<LogService>();
logServiceObj31._LogInstance = kernelObj.Get<ILog>();
logServiceObj31.WriteLog("Hello Ninject!");
Console.WriteLine("");
(4)Inject特性,在构造函数、属性和字段上加 [Inject]特性指示,以便指定注入的属性、方法和字段等
如果没有在构造函数上指定[Inject],默认选择需要注入的接口参数最多的一个,如果需要注入接口参数一样多,则为这些项中的第1个构造函数.
4. 参考网址
http://www.cnblogs.com/coolcode/archive/2009/11/10/Ninject.html
http://www.cnblogs.com/xray2005/archive/2011/10/31/2230900.html
http://www.cnblogs.com/xray2005/archive/2011/11/06/2237803.html
http://blog.csdn.net/simpkan/article/details/8169740
5. Demo下载
下一步准备整理微软的Unity2.0 Ioc、Castle 注入.
View Code