广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >WebAPI中使用Autofac实现依赖注入
  • 941
分享到

WebAPI中使用Autofac实现依赖注入

2024-04-02 19:04:59 941人浏览 八月长安
摘要

一、创建实体类库 创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: using System; using System.Collect

一、创建实体类库

创建单独实体类

创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Entity
{
    public class UserEntity
    {
        public int UserId { get; set; }

        public string UserName { get; set; }

        public int Sex { get; set; }

        public int Age { get; set; }
    }
}

二、创建仓储接口类库

新建DI.Interface类库文件,存放所有接口,IUserRepository接口定义如下:

using DI.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Interface
{
    public interface IUserRepository
    {
        List<UserEntity> GetUsers();
    }
}

三、创建仓储接口的实现类库

1、SQL Server数据库实现

新建DI.sqlServer类库文件,SqlServerUserRepository实现IUserRepository接口,SqlServerUserRepository类定义如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace DI.SqlServer
{
    public class SqlServerUserRepository : IUserRepository
    {
        public List<UserEntity> GetUsers()
        {
            List<UserEntity> list = new List<UserEntity>()
            {
              new UserEntity(){UserId=1,UserName="王五",Sex=2,Age=21},
              new UserEntity(){UserId=2,UserName="赵六",Sex=2,Age=23},
            };

            return list;
        }
    }
}

2、oracle数据库实现

新建DI.Oracle类库文件,OracleUserRepository实现IUserRepository接口,OracleUserRepository类定义如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DI.Oracle
{
    public class OracleUserRepository : IUserRepository
    {
        public List<UserEntity> GetUsers()
        {
            List<UserEntity> list = new List<UserEntity>()
            {
              new UserEntity(){UserId=1,UserName="张三",Sex=1,Age=24},
              new UserEntity(){UserId=2,UserName="李四",Sex=1,Age=22},
            };

            return list;
        }
    }
}

四、新建webapi项目

1、安装依赖项

通过NuGet安装所需的依赖项:Autofac、Autofac.WEBapi2(如果使用的是WebApi1,这里需要安装WebApi)。

2、创建AutofacWebApiConfig类

AutofacWebApiConfig类定义如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;

namespace WebApi.AutofacDI
{
    public class AutofacWebApiConfig
    {
        public static void ReGISterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            // 使用SQLserver数据库实现
            builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

3、修改Global.asax文件

修改后的Global.asax文件定义如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.mvc;
using System.Web.Optimization;
using System.Web.Routing;
using WebApi.AutofacDI;

namespace WebApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            // 配置依赖注入
            AutofacWebApiConfig.RegisterDependencies();
        }
    }
}

4、创建Users控制器

创建UsersController类,并在构造函数中注入,UsersController类定义如下:

using DI.Entity;
using DI.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.net;
using System.Net.Http;
using System.Web.Http;

namespace WebApi.Controllers
{
    public class UsersController : ApiController
    {
        private IUserRepository _userRepository;

        /// <summary>
        /// 构造函数中注入
        /// </summary>
        /// <param name="userRepository"></param>
        public UsersController(IUserRepository userRepository)
        {
            this._userRepository = userRepository;
        }

        public IHttpActionResult Get()
        {
            return JSON <List<UserEntity>>( _userRepository.GetUsers());
        }
    }
}

5、测试

启动程序,然后在浏览器里面输入:http://localhost:51157/api/users,结果如下:

从结果中可以看出:这里使用的是SQLserver实现的。

修改AutofacWebApiConfig文件,用oracle实现,修改后的代码如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.Oracle;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Http;

namespace WebApi.AutofacDI
{
    public class AutofacWebApiConfig
    {
        public static void RegisterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            // 使用SQLserver数据库实现
            //builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            // 使用oracle数据库实现
            builder.RegisterType<OracleUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

运行结果:

从结果中可以看出:这里使用的是oracle实现的。

五、将Autofac的实现放到单独的类库中

新建DI.Server类库,将Autofac的注册单独放在类库中,AutofacWebApiConfig类定义如下:

using Autofac;
using Autofac.Integration.WebApi;
using DI.Interface;
using DI.SqlServer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Mvc;

namespace DI.Server
{
    public class AutofacWebApiConfig
    {
        public static void RegisterDependencies()
        {
            SetAutofacWebapi();
        }

        private static void SetAutofacWebapi()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            // Register API controllers using assembly scanning.
            builder.RegisterApiControllers(Assembly.LoadFrom(@"F:\Practice\WebAPI\WebApi依赖注入\DI\WebApiDIDemo\WebApi\bin\WebApi.dll"));
            builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).Where(t => t.Name.EndsWith("Repository")).AsImplementedInterfaces();
            builder.RegisterType<SqlServerUserRepository>().As<IUserRepository>().InstancePerRequest();
            var container = builder.Build();
            // Set the WebApi dependency resolver.
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

注意:

如果是在单独的类库项目中,注册Api控制器的时候要加载WebApi项目所有的程序集文件,不要使用builder.RegisterApiControllers(Assembly.GetExecutingAssembly()),这里找到的当前程序集是类库文件,不是WebApi项目的程序集文件,在控制器里面不会实现注入。

2、修改Global.asax文件

修改后的Global.asax文件定义如下:

using DI.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;


namespace WebApi
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            // 配置依赖注入(注意:这里使用的是单独类库里面的AutofacWebApiConfig类)
            AutofacWebApiConfig.RegisterDependencies();
        }
    }
}

运行程序,效果和上面的一样。

到此这篇关于Web API中使用Autofac实现依赖注入的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: WebAPI中使用Autofac实现依赖注入

本文链接: https://www.lsjlt.com/news/142296.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WebAPI中使用Autofac实现依赖注入
    一、创建实体类库 创建单独实体类 创建DI.Entity类库,用来存放所有的实体类,新建用户实体类,其结构如下: using System; using System.Collect...
    99+
    2022-11-13
  • ASP.NETCore使用AutoFac依赖注入
    实现代码新建接口类:IRepository.cs,规范各个操作类的都有那些方法,方便管理。using System;using System.Collections.Generic;using System.L...
    99+
    2023-06-03
  • Web API中如何使用Autofac实现依赖注入
    这篇文章主要介绍了Web API中如何使用Autofac实现依赖注入的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Web API中如何使用Autofac实现依赖注入文章都会有所收获,下面我们...
    99+
    2023-06-29
  • ASP.net core使用Autofac实现泛型依赖注入
    目录什么是泛型依赖注入.net core里实现泛型依赖注入安装AutofacIMyRepository定义仓储接口MyRepositoryBase仓储实现在Program声明实现依赖...
    99+
    2022-11-13
  • ASP.net core怎么使用Autofac实现泛型依赖注入
    本文小编为大家详细介绍“ASP.net core怎么使用Autofac实现泛型依赖注入”,内容详细,步骤清晰,细节处理妥当,希望这篇“ASP.net core怎么使用Autofac实现泛型依赖注入”文章能帮助大家解决疑惑...
    99+
    2023-06-30
  • C# 利用Autofac批量接口注入依赖的问题小结
    背景:   本人在一位大佬的Colder框架中看到了这个接口注入,然后呢就想学习一下ioc思想与di设计模式。此写法给我的感觉就是 非常的 优雅 ,优雅永不过时。关于接口注入具体是什...
    99+
    2022-11-12
  • php中如何使用laravel实现依赖注入
    这篇文章主要介绍“php中如何使用laravel实现依赖注入”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中如何使用laravel实现依赖注入”文章能帮助大家解决问题。laravel容器包含控...
    99+
    2023-07-04
  • Asp.net core中依赖注入的实现
    使用服务 在Asp.net core的Controller中,可以通过如下两种方式获取系统注入的服务: 构造函数 可以直接在构造函数中传入所依赖的服务,这是非常常见的DI注入方式。 ...
    99+
    2022-11-13
  • PHP中怎样实现依赖注入
    今天就跟大家聊聊有关PHP中怎样实现依赖注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们来看一段代码:class A{ public functi...
    99+
    2023-06-04
  • SpringBoot中如何实现注入依赖
    SpringBoot中如何实现注入依赖?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天给大家介绍一下SpringBoot中是如何实现依赖注入的功能。在以往spring使用...
    99+
    2023-05-31
    springboot bo 依赖注入
  • golang依赖注入怎么实现
    在Go语言中实现依赖注入可以使用两种常见的方式:构造函数注入和接口注入。1. 构造函数注入:构造函数注入是通过在结构体中定义一个包含...
    99+
    2023-09-17
    golang
  • AngularJS如何实现依赖注入
    小编给大家分享一下AngularJS如何实现依赖注入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简介:首先我们需要理解什么是依...
    99+
    2022-10-19
  • Angular依赖注入怎么实现
    今天小编给大家分享一下Angular依赖注入怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2022-10-19
  • python依赖注入怎么实现
    在Python中实现依赖注入有多种方法,下面介绍两种常用的实现方式:1. 使用第三方库:可以使用流行的依赖注入框架,例如Dagger...
    99+
    2023-08-30
    python
  • 如何在PHP中实现依赖注入
    这篇文章给大家介绍如何在PHP中实现依赖注入,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先,我们来看一段代码:class A{      &nb...
    99+
    2023-06-17
  • VSCode中的依赖注入怎么实现
    这篇文章主要讲解了“VSCode中的依赖注入怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VSCode中的依赖注入怎么实现”吧!依赖注入介绍如果有这样一个模块 A,它的实现依赖另一个...
    99+
    2023-07-04
  • java Spring中如何实现依赖注入
    总得来说,Spring中依赖注入有这么三种方式:①通过set方式赋值②通过构造器赋值③通过p标签赋值java相关视频教程推荐:java视频下面我们稍稍展开来谈:1.通过set方式赋值 主要用到围堵标签来传递值此处的name就是Teach...
    99+
    2019-11-15
    java教程 java Spring 依赖注入
  • Spring IoC中怎么实现依赖注入
    本篇文章为大家展示了Spring IoC中怎么实现依赖注入,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、依赖注入(DI)DI(Dependency Inject...
    99+
    2022-10-19
  • Vue 3.0中怎么实现依赖注入
    这篇文章将为大家详细讲解有关Vue 3.0中怎么实现依赖注入,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。使用过 Angular 的小伙伴对 依赖注入 应该...
    99+
    2022-10-19
  • Angular中如何使用依赖注入
    这篇文章主要介绍了Angular中如何使用依赖注入,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。useFactory、useClass、us...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作