首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Ninject在MVC 3中注入属性

使用Ninject在MVC 3中注入属性,可以通过以下步骤实现:

  1. 首先,需要安装Ninject和Ninject.MVC3包。可以使用NuGet包管理器来安装。
  2. 创建一个Ninject依赖注入容器,并在其中注册需要注入的类型。
  3. 在MVC 3项目中创建一个自定义的DependencyResolver,并使用Ninject容器来解析依赖。
  4. 在控制器中使用属性注入来获取依赖的实例。

下面是一个示例代码:

  1. 安装Ninject和Ninject.MVC3包:
代码语言:csharp
复制
Install-Package Ninject
Install-Package Ninject.MVC3
  1. 创建一个Ninject依赖注入容器,并在其中注册需要注入的类型:
代码语言:csharp
复制
using Ninject;
using Ninject.Modules;
using Ninject.Web.Common;

public class MyNinjectModule : NinjectModule
{
    public override void Load()
    {
        Bind<IMyService>().To<MyService>();
    }
}

public class NinjectDependencyResolver : IDependencyResolver
{
    private IKernel kernel;

    public NinjectDependencyResolver(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public object GetService(Type serviceType)
    {
        return kernel.TryGet(serviceType);
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        return kernel.GetAll(serviceType);
    }
}
  1. 在MVC 3项目中创建一个自定义的DependencyResolver,并使用Ninject容器来解析依赖:
代码语言:csharp
复制
using System;
using System.Web.Mvc;
using Ninject;

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        IKernel kernel = new StandardKernel(new MyNinjectModule());
        DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
    }
}
  1. 在控制器中使用属性注入来获取依赖的实例:
代码语言:csharp
复制
using System.Web.Mvc;

public class HomeController : Controller
{
    [Inject]
    public IMyService MyService { get; set; }

    public ActionResult Index()
    {
        MyService.DoSomething();
        return View();
    }
}

这样,在HomeController中就可以使用属性注入来获取IMyService的实例,而不需要在控制器中手动创建和管理依赖。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET MVC的Razor引擎:IoCView激活过程中的应用

《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的DependencyResolver...本篇文章中我们将演示如何通过自定义View的方式实现与IoC框架Ninject的集成。[本文已经同步到《How ASP.NET MVC Works?》...中] 我们定义了一个具有如下定义的NinjectDependencyResolver,它具有一个IKernel类型的只读属性Kernel,该属性构造函数中被初始化为一个StandardKernel对象...由于该属性上应用了Ninject.InjectAttribute特性,意味着该属性会以“属性注入”的方式被自动初始化。...ASP.NET MVC的Razor引擎:View编译原理 ASP.NET MVC的Razor引擎:RazorView ASP.NET MVC的Razor引擎:IoCView激活过程中的应用 ASP.NET

90490

Spring注入的成员属性HttpServletRequest是线程安全的吗?【享学Spring MVC

可即便如此,日常开发中我们还是希望能得到表示一个请求的HttpServletRequest实例,Spring MVC也考虑到了这种诉求的“合理性”,所以获取起来其实也非常的方便。...---- 正文 讨论如题的疑问前,先简单的了解下Spring MVC有哪些方式可以得到一个HttpServletRequest,也就是每个请求都能对应一个HttpServletRequest。...---- 得到HttpServletRequest的三种方式 粗略的统计一下,Spring MVC中直接得到HttpServletRequest的方式有三种。...当然喽,用这种方式的选手少之又少,原因很简单:Controller是单例的,多疑成员属性线程不安全,会有线程安全问题。对自己掌握的知识不自信,从而导致不敢使用这是最直接的原因。...究其原因是@Autowire注入进来的实际使用的Request对象获取使用的是RequestContextHolder,而它最多只支持向子线程传递数据,不支持线程池。

3.4K50

spring-自动加载配置文件使用属性文件注入

自动加载配置文件 web项目中,可以让spring自动加载配置文件(即上图中的src/main/resouces/spring下的xml文件),WEB-INF/web.xml中参考以下设置: 1 <...使用properties文件注入 为了演示注入效果,先定义一个基本的Entity类 1 package yjmyzz.entity; 2 3 import java.io.Serializable...classpath:properties/*.properties表示运行时 , spring容器会自动加载classpath\properties目录下的所有以.properties后缀结尾的文件 ,  我们src...=phone 该文件被spring自动加载后 , 就可以用里面定义的属性值 , 为Bean做setter属性注入 , 即配置文件中的 4.验证注入是否成功 HomeController里 ,  向Spring容器要一个Bean ,  显示下它的属性: 1 package yjmyzz.controller

1.2K70

Task中使用依赖注入的ServiceEFContext

C#:Task中使用依赖注入的Service/EFContext dotnet core时代,依赖注入基本已经成为标配了,这就不多说了....前几天在做某个功能的时候遇到Task中使用EF DbContext的问题,学艺不精的我被困扰了不短的一段时间, 于是有了这个文章. 先说一下代码结构和场景....这种错误的一个常见原因是使用从依赖注入中解决的上下文,然后应用程序的其他地方尝试使用相同的上下文实例。...如果您在上下文上调用Dispose(),或者using语句中包装上下文,可能会发生这种情况。如果使用依赖项注入,则应该让依赖项注入容器处理上下文实例。 用人话来说是什么意思呢?...这里的HouseDbContext是依赖注入进来的,生命周期由容器本身管理; Task.Run中再次使用HouseDbContext实例中由于已经切换了线程了, HouseDbContext实例已经被释放掉了

83740

CA1024:适用处使用属性

规则说明 大多数情况下,属性表示数据,方法执行操作。 访问属性的方式类似于访问字段,这使得它们更易于使用。...抑制警告 可以通过多种方式来禁止显示代码分析警告,包括禁用项目的规则、使用预处理器指令为特定代码行禁用该规则或应用 SuppressMessageAttribute 特性。...配置代码以进行分析 使用下面的选项来配置代码库的哪些部分要运行此规则。 包含特定的 API 图面 你可以仅为此规则、为所有规则或为此类别中的所有规则配置此选项(设计)。...,和几个不应转换为属性的方法(因为它们的行为不像字段)。...编程人员避免使用属性的一个原因是,它们不希望调试器自动扩展它。

41530

Swift中使用工厂进行依赖注入

传递依赖关系 使用依赖注入时,我们经常会出现上述情况,主要原因是我们需要传递依赖关系,以便以后使用它们。...( message: message, sender: MessageSender.shared ) 然而,就像我们 "避免Swift中使用单例 "中看到的那样,单例方法也有一些明显的缺点...lazy属性,以便在初始化我们的对象时能够引用同一类别的其他属性。...= UINavigationController( rootViewController: listViewController ) 不需要在任何地方保留任何全局变量,也不需要在应用程序委托中使用可选属性...由于我们已经将所有的工厂定义为协议,我们可以通过实现任何给定工厂协议的特定测试版本,测试中轻松地模拟它们。我将在未来的博文中写更多关于模拟和如何在测试中充分利用依赖注入的内容。 你怎么看?

79120

深入理解DIP、IoC、DI以及IoC容器 摘要

IoC有2种常见的实现方式:依赖注入和服务定位。其中,依赖注入使用最为广泛。下面我们将深入理解依赖注入(DI),并学会使用。...方法二 属性注入 顾名思义,属性注入是通过属性来传递依赖。...方法三 接口注入 相比构造函数注入属性注入,接口注入显得有些复杂,使用也不常见。具体思路是先定义一个接口,包含一个设置依赖的方法。然后依赖类,继承并实现这个接口。...LightInject:  http://www.lightinject.net/ (推荐使用Chrome浏览器访问)  以Ninject为例,我们同样来实现 [方法一 构造函数注入] 的功能。...首先在项目添加Ninject程序集,同时使用using指令引入。

59230

ASP.NET MVC Controller激活系统详解:IoC的应用

[上篇]除了通过自定义ControllerFactory的方式引入IoC之外,使用默认DefaultControllerFactory情况下也可以通过一些扩展使基于IoC的Controller激活成为可能...我们接下来自定义的ControllerActivtor基于另一个IoC框架Ninject,较之Unity,Ninject是一个更加轻量级也更适合ASP.NET MVC的IoC框架。...NinjectControllerActivator的只读属性Kernel在这里用于类型注册和基于类型的实例提供,具体来说它是构造函数中初始化的StandardKernel对象。...同样是采用Ninject,我们定义了一个具有如下定义的NinjectDependencyResolver。...与上面定义的NinjectControllerActivator类似,NinjectDependencyResolver具有一个IKernel类型的只读属性Kernel,该属性构造函数中被初始化。

690100

ASP.NET MVC使用“RadioButtonList”和“CheckBoxList”

《为HtmlHelper添加一个RadioButtonList扩展方法》中我通过对HtmlHelper和HtmlHelper的扩展使我们可以采用”RadioButtonList”的方式对一组类型为...本解决方案旨在解决如下一些问题: 通过独立的组件对绑定到ListControl(ASP.NET Web Form的说法)的列表进行单独管理; 自动地调用上面这个组件获取列表信息进行相关Html的生成; 支持ASP.NET MVC...public string MaritalStatus { get; set; } 7: public string[] Country { get; set; } 8: } 上述三个属性分别代表...codeCollection.Add(code); 33: } 34: return codeCollection; 35: } 36: } 默认的...对于Person的三个基于列表的属性,我们分别调用了自定义的扩展方法RadioButtonListFor和CheckBoxListFor进行了绑定。

1.2K80

Spring MVC使用注解的方式校验RequestParams

概述   Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是@RequestParam...中,没有Bean对象,这样使得校验无法进行,可以通过使用@Validated注解,使得校验可以进行。...校验bean对象   一般校验bean对象,为了可以自动的校验属性,可以通过两步解决: 一、声明对象 package com.github.yongzhizhan.draftbox.model; import...bean的方式,没有办法校验RequestParam的内容,一般处理Get请求的时候,会使用下面这样的代码: @ResponseBody @RequestMapping(value = "validString..."") @Size(min = 1, max = 3) String vStr){ return vStr; } } 代码 github

1.4K40
领券