本章將講下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