Ninject 学习杂记

本文详细介绍了Ninject容器如何通过反射生成类型实例并实现依赖注入,包括实例的生命周期管理、类型绑定映射配置及XML配置方式。重点讨论了Ninject容器的核心功能,如单例、线程、请求作用域的实例生命周期,以及如何通过模块化管理类型绑定。此外,还阐述了如何使用Ninject加载配置文件以简化类型绑定注册过程。


IOC容器的DI实现并不依赖于方法调用拦截,而是通过DI容器内部自己通过反射的方式生成需要的类型实例,并调用实例的成员。然后再把实例返回给容器外部环境使用。

Ninject本身及其扩展库,还针对特定的开发平台或项目类型提供了专用的DI支持,比如针对WPF/SL,针对ASP.NET MVC

Ninject 的扩展库 也是基于Ninject核心库的,对于某些特定场景的功能补充

StandardKernel 是Ninject中的IOC容器类,Get方法是显式的得到某类型的实例, Bind方法是类型映射注册,注册以后,Ninject就可以根据程序的需要来提供实例创建。

using (var kernel = new Ninject.StandardKernel())
{
var service = kernel.Get<SalutationService>();

kernel.Bind<ILog>().To<ConsoleLog>();
service.SayHello();
}

如果没有特别指定由Ninject创建的类型实例的生命周期,那么就是默认的每次都由Ninject提供一个新的类型实例,Ninject不负责管理它的lifecycle
Kernel.Bind<Ilogger>().To<ConsoleLogger>().InSingletonScope(); 来显式的指定实例是以单例形式存在,每次Ninject都只提供已经存在的类型实例,而不是重新构建新的。
.InThreadScope() 对同一线程提供同一实例
.InRequestScope() 针对同一Web request 提供同一实例。
.InScope(func) 可以由开发者自己定义Scope, 直到func 返回的值发生了变化,才重新构建新的实例。

Kernel.Bind<MailService>().ToSelf() 是把某类型自己映射到自己。

Ninject Module: Module 是作为Ninject中对 类型绑定映射进行分组管理的单元。
public class LoggerModule : NinjectModule
{
public override void Load()
{
Bind<ILog>().To<ConsoleLog>().InSingletonScope();
}
}

static void Main(string[] args)
{
using (var kernel = new Ninject.StandardKernel(new LoggerModule()))
{
var logger = kernel.Get<ILog>();

logger.Log("wow");
}
}


We can also load all of the Ninject modules defned in an application at the same
time using the following code:
kernel.Load(AppDomain.CurrentDomain.GetAssemblies());

Ninject 还允许通过XML配置文件形式来定义类型绑定映射, 之后就可以通过Kernel.Load("Config.xml") 的形式读取配置信息,并完成映射注册

转载于:https://www.cnblogs.com/liucy1898/p/3587455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值