Asp.Net Core WebApi Swagger+Autofac+JWT的实现(二)

本章将讲下Autofac的注入实现,关于Autofac的讲解以及API参见https://autofaccn.readthedocs.io/zh/latest/getting-started/index.html

项目的基础搭建参见上篇文章https://blog.csdn.net/liwan09/article/details/100733455

Autofac注入的实现

NetCore.App项目从Nuget中添加对Autofac、以及Autofac.Extensions.DependencyInjection两个包的引用

NetCore.WebApi 项目从Nuget中添加Autofac.Extensions.DependencyInjection包的引用

NetCore.App项目中添加AutoFacApp类

using System;
using System.Reflection;
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using NetCore.Repository;

namespace NetCore.App
{
    /// <summary>
    /// AutoFac 注入
    /// </summary>
    public static class AutoFacApp
    {
        private static IContainer container;
        /// <summary>
        /// 注册组件
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static IContainer InitAutoFac(IServiceCollection services)
        {
            var builder = new ContainerBuilder();
            //注册数据库操作类
            services.AddScoped(typeof(BaseRepository<>));
            services.AddScoped(typeof(UnitWork));
            //注册数据操作类(App层)
            builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly());
            builder.Populate(services);
            container = builder.Build();
            return container;
        }
        /// <summary>
        /// 从容器中获取对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public static T GetFromFac<T>()
        {
            return container.Resolve<T>();
        }
    }
}

NetCore.WebApi 项目中的Startup.cs文件修改

 1)将ConfigureServices方法的返回类型修改为IServiceProvider

 2)ConfigureServices方法 中的最后一行代码,返回IServiceProvider

 public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddDbContext<NetCoreDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("NetCoreDBContext")));//获取数据库连接 
            return new AutofacServiceProvider(AutoFacApp.InitAutoFac(services));
        }

NetCore.WebApi项目添加对NetCore.App以及NetCore.Repository两个项目的引用,然后在项目中添加UserInfoController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NetCore.App;
using NetCore.Repository;
using NetCore.Repository.Domain;
using NetCore.Repository.RequestEntity;

namespace NetCore.WebApi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UserInfoController : ControllerBase
    {
        private readonly UserInfoApp userInfoApp;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="_userInfoApp"></param>
        public UserInfoController(UserInfoApp _userInfoApp)
        {
            userInfoApp = _userInfoApp;
        }
        
        /// <summary>
        /// 添加用户信息
        /// </summary>
        /// <param name="userInfo">用户信息</param>
        /// <returns></returns>
        [HttpPut]
        public ResponseResult Add(UserInfo userInfo)
        {
            if (userInfoApp.IsExist(userInfo.LoginAccount, userInfo.ID))
            {
                return new ResponseResult() { Code = 201, Message = "账户已存在" };
            }
            return userInfoApp.Add(userInfo) ? new ResponseResult() : new ResponseResult() {Code=201,Message="操作失败"};
        }
        /// <summary>
        /// 获取用户信息列表
        /// </summary>
        /// <param name="userInfoRequest"></param>
        /// <returns></returns>
        [HttpGet]
        public ResponseResult<UserInfo> GetUserList(UserInfoRequest userInfoRequest)
        {
            var userList = userInfoApp.GetList(userInfoRequest);
            return new ResponseResult<UserInfo>() { DataResult=userList};
        }
    }
}

 可通过PostMan 调用该接口,测试一下,如果取得数据,那么Autofac注入已实现

完整代码下载地址:https://download.csdn.net/download/liwan09/11717224

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值