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の2つのパッケージの参照
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
{
    /// 
    /// AutoFac   
    /// 
    public static class AutoFacApp
    {
        private static IContainer container;
        /// 
        ///     
        /// 
        /// 
        /// 
        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;
        }
        /// 
        ///         
        /// 
        /// 
        public static T GetFromFac()
        {
            return container.Resolve();
        }
    }
}

NetCore.WebApiプロジェクトのStartup.csファイルの変更
1)コンフィギュレーションサービスメソッドの戻りタイプをIServiceProviderに変更する
2)ConfigureServicesメソッドの最後の行のコードは、IServiceProviderに戻ります.
 public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.Configure(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(options => options.UseSqlServer(Configuration.GetConnectionString("NetCoreDBContext")));//        
            return new AutofacServiceProvider(AutoFacApp.InitAutoFac(services));
        }

NetCore.WebApiプロジェクトのNetCoreへの追加AppおよびNetCore.Repositoryの2つのプロジェクトの参照を作成し、プロジェクトに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;
        /// 
        ///     
        /// 
        /// 
        public UserInfoController(UserInfoApp _userInfoApp)
        {
            userInfoApp = _userInfoApp;
        }
        
        /// 
        ///       
        /// 
        ///     
        /// 
        [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="    "};
        }
        /// 
        ///         
        /// 
        /// 
        /// 
        [HttpGet]
        public ResponseResult GetUserList(UserInfoRequest userInfoRequest)
        {
            var userList = userInfoApp.GetList(userInfoRequest);
            return new ResponseResult() { DataResult=userList};
        }
    }
}

PostManでインタフェースを呼び出すことができます.テストしてみてください.データを取得すると、Autofac注入が実現します.
完全なコードのダウンロードアドレス:https://download.csdn.net/download/liwan09/11717224