您的位置:首页 > 其它

Ninject.MVC 知识点记录

2016-03-17 14:16 357 查看
Ninject 是跟Unity 差不多的DI容器。Ninject 推荐零配置,快速使用。小中型项目,最适合。

通过nuget,安装Ninject.MVC。略

场景模拟 项目下载地址:https://coding.net/u/chenxygx/p/CodeSave/git/tree/master/EssentialTools

定义一个计算产品的接口,IValueCalculator,往后都会围绕产品计算,来进行依赖注入。

public class HomeController : Controller
{
private IValueCalculator calc;
public HomeController(IValueCalculator calcParam)
{
calc = calcParam;
}

// GET: Home
public ActionResult Index()
{
return View(calc.ValueProduct(products));
}
}


HomeController

控制反转会考察依赖项是否依赖其他类型,例如如果LinqValueCalculator,还有依赖项,则也会进行控制反转。

指定属性参数值

可以使用 WithPropertyValue 指定实例中属性的值。

kernel.Bind<IDiscountHelper>().To<DefuaultDicountHelper>().WithPropertyValue("DiscountSize", 50M)


会传递50M到DefuaultDicountHelper里面的 DiscountSize属性。

指定构造器参数

可以使用 WinthConstructorArugment方法指定构造器中参数的值。

kernel.Bind<IDiscountHelper>().To<DefuaultDicountHelper>().WithConstructorArgument("discountParam",50M);

public DefuaultDicountHelper(decimal discountParam)
{
DiscountSize = discountParam;
}


条件绑定

可以针对依赖注入设置对应条件,例如:要创建 LinqValueCalculator对象时,使用FlexibleDiscountHelper 作为 IDiscountHelper接口的实现。

kernel.Bind<IDiscountHelper>().To<FlexibleDiscountHelper>().WhenInjectedInto<LinqValueCalculator>();


WhenInjectedInto<T>() 当要被注入的类是类型T时,进行绑定

WhenClassHas<T>() 当被注入的类以注解属性进行注释,而类型为T时,进行绑定

作用域

可以设置绑定的作用域

kernel.Bind<IValueCalculator>().To<LinqValueCalculator>().InRequestScope();


InRequestScope() 创建一个单一实例,用于解析一个HTTP请求中各个对象的依赖项

InThreadScope() 创建一个单一实例,将其用于解析一个线程中各个对象的依赖项

InSingletonScope() 使其共享于整个应用程序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: