欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > ASP.NET MVC5使用依赖注入实现DI asp.net mvc5使用依赖注入

ASP.NET MVC5使用依赖注入实现DI asp.net mvc5使用依赖注入

2024/10/24 23:24:42 来源:https://blog.csdn.net/qq_40739917/article/details/142569579  浏览:    关键词:ASP.NET MVC5使用依赖注入实现DI asp.net mvc5使用依赖注入

ASP.NET MVC5使用依赖注入实现DI asp.net mvc5使用依赖注入

  • 1、 使用Ninject实现
    • 1.1、 安装Ninject NuGet包
    • 1.2、 创建Ninject依赖注入配置文件
    • 1.3、 配置Ninject
    • 1.4、 使用依赖注入
      • 1.4.1、 构造函数方式注入
      • 1.4.2、 注解方式注入
  • 2、 使用Autofac实现
    • 2.1、 安装Autofac NuGet包
    • 2.2、配置 Autofac
    • 2.3、 使用依赖注入
      • 2.3.1、 构造函数方式注入

习惯了Spring的IOC依赖注入开发,现在切换了asp.net开发,也想使用依赖注入,看官方文档 .net也有依赖注入(DI),在 asp.net mvc5中可以使用 Ninject、Autofac等其他第三方组件实现

1、 使用Ninject实现

1.1、 安装Ninject NuGet包

在 NuGet控制台中输入安装命令, 需要安装 Ninject 以及 Ninject.MVC5

Install-Package Ninject  
Install-Package Ninject.MVC5

1.2、 创建Ninject依赖注入配置文件

创建一个类来配置Ninject
类名: NinjectDependencyResolver.cs

using Ninject;
using Ninject.Web.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;namespace AspNetBlog.App_Start {/*** 依赖注入插件* 需要使用NuGet安装 DI组件:Ninject 与 Ninject MVC* */public class NinjectDependencyResolver : IDependencyResolver {private IKernel kernel;public NinjectDependencyResolver() {kernel = new StandardKernel();AddBindings();}public object GetService(Type serviceType) {return kernel.TryGet(serviceType);}public IEnumerable<object> GetServices(Type serviceType) {return kernel.GetAll(serviceType);}/// <summary>/// 添加依赖绑定/// </summary>private void AddBindings() {//添加方式如下:左边括号里的是接口,后边括号里的实现接口的类//kernel.Bind<IAdminService>().To<AdminService>();// 注册 AdminService 服务, 我并没有使用服务实现模式,直接使用服务类,作用域为 每个请求 单例模式存在// InRequestScope 是单例模式,为每个请求创建一个独立的实例kernel.Bind<AdminService>().ToSelf().InRequestScope();}/// <summary>/// 注册其他依赖服务/// </summary>private void RegisterServices() {// 注册 DbContext,作用域为 每个请求 单例模式存在kernel.Bind<ApplicationDbContext>().ToSelf().InRequestScope();}}
}

1.3、 配置Ninject

将刚才创建的Ninject配置文件类 NinjectDependencyResolver.cs 注册到系统当中

Global.asax文件中 配置 Ninject

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;namespace AspNetBlog {public class MvcApplication : System.Web.HttpApplication {protected void Application_Start() {AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);// 配置 DbContext上下文Database.SetInitializer<ApplicationDbContext>(null);//注册Ninject容器DependencyResolver.SetResolver(new NinjectDependencyResolver());}}
}

1.4、 使用依赖注入

1.4.1、 构造函数方式注入

public class AdminController : BaseController {private readonly AdminService _adminService;// 构造函数注入public AdminController(AdminService adminService) {_adminService = adminService;}[HttpPost]public async Task<string> Save(Admin admin) {return await _adminService.Save(admin);}
}

1.4.2、 注解方式注入

public class AdminController : BaseController {// 注解方式注入[Ninject.Inject]private AdminService _adminService {get; set;}[HttpPost]public async Task<string> Save(Admin admin) {return await _adminService.Save(admin);}
}

2、 使用Autofac实现

2.1、 安装Autofac NuGet包

在 NuGet控制台中输入安装命令, 需要安装 Ninject 以及 Ninject.MVC5

Install-Package Autofac
Install-Package Autofac.Integration.Web

2.2、配置 Autofac

Global.asax文件中 配置 Autofac

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;namespace AspNetBlog {public class MvcApplication : System.Web.HttpApplication {protected void Application_Start() {AreaRegistration.RegisterAllAreas();FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);// 配置 DbContext上下文Database.SetInitializer<ApplicationDbContext>(null);// 初始化 Autofac 容器var builder = new ContainerBuilder();builder.RegisterApiControllers(GlobalConfiguration.Configuration);// 注册 DbContext 依赖服务,作用域为单例模式builder.RegisterType<ApplicationDbContext>().InstancePerRequest();// 注册 业务依赖服务builder.RegisterType<AdminService>().InstancePerRequest();// 构建容器var container = builder.Build();// 将容器设置为全局容器GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);GlobalConfiguration.Configure(WebApiConfig.Register);}}
}

2.3、 使用依赖注入

2.3.1、 构造函数方式注入

public class AdminController : BaseController {private readonly AdminService _adminService;// 构造函数注入public AdminController(AdminService adminService) {_adminService = adminService;}[HttpPost]public async Task<string> Save(Admin admin) {return await _adminService.Save(admin);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com