.Net WebApi Swagger+AutoFac+JWT的實現(二)

本章將講下Autofac的注入實現,關於Autofac的講解以及API參見https://autofaccn.readthedocs.io/zh/latest/getting-started/index.html

項目的基礎搭建參見上篇文章 https://blog.csdn.net/liwan09/article/details/101449110

 

Autofac注入的實現


Net.WebApi 添加對Net.App、Net.IApp以及Net.Repository三個項目的引用

Net.WebApi 從Nuget中搜索安裝Autofac.WebApi2,安裝時會自動安裝依賴包Autofac

在App_Start文件夾下,添加AutoFacConfig類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Reflection;
using Net.Repository;
using Autofac;
using Autofac.Integration.WebApi;

namespace Net.WebApi
{
    /// <summary>
    /// AutoFac註冊
    /// </summary>
    public class AutoFacConfig
    {
        /// <summary>
        /// 註冊組件
        /// </summary>
        /// <returns></returns>
        public static void InitAutoFac()
        {
            ContainerBuilder builder = new ContainerBuilder();
            HttpConfiguration config = GlobalConfiguration.Configuration;
            builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IBaseRepository<>));
            builder.RegisterType(typeof(UnitWork)).As(typeof(IUnitWork));
            builder.RegisterType(typeof(NetDbContext));
            var app = Assembly.Load("Net.App");
            var iApp= Assembly.Load("Net.IApp");
            //根據名稱約定(服務層的接口和實現均以App結尾),實現服務接口和服務實現的依賴
            builder.RegisterAssemblyTypes(iApp, app).Where(t => t.Name.EndsWith("App")).AsImplementedInterfaces();
            builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
            // OPTIONAL: Register the Autofac filter provider.
            builder.RegisterWebApiFilterProvider(config);
            // OPTIONAL: Register the Autofac model binder provider.
            builder.RegisterWebApiModelBinderProvider();
            var container = builder.Build();
            config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
        }
    }
}

在Global.asax後臺代碼中,添加autofac 注入

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 Net.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);
            AutoFacConfig.InitAutoFac();//autofac 注入
        }
    }
}

在控制器文件夾下添加UserInfoController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Net.Repository.RequestEntity;
using Net.Repository.Domain;
using Net.Repository;
using Net.IApp;

namespace Net.WebApi.Controllers
{
    /// <summary>
    /// 用戶信息
    /// </summary>
    [RoutePrefix("api/[controller]/[action]")]
    public class UserInfoController : ApiController
    {
        private readonly IUserInfoApp userInfoApp;
        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="_userInfoApp"></param>
        public UserInfoController(IUserInfoApp _userInfoApp)
        {
            userInfoApp = _userInfoApp;
        }
        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        [HttpPut]
        public ResponseResult Add([FromBody] 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([FromBody] UserInfoRequest userInfoRequest)
        {
            var userList= userInfoApp.GetList(userInfoRequest);
            return new ResponseResult<UserInfo>() { DataResult = userList };
        }
    }
}

通過PostMan調用接口進行測試,若果接口操作正常,那麼AutoFac注入成功

完整代碼下載地址:https://download.csdn.net/download/liwan09/11720168

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章