1.創建空項目 如test20220218
2.創建四個類庫 .net core 3.1
名稱分別爲
WebApi.Core.IRepository 倉儲接口類
WebApi.Core.Repository 倉儲類
WebApi.Core.IService 服務接口類
WebApi.Core.Service 服務類
/// <summary>
/// 倉儲接口類
/// </summary>
namespace WebApi.Core.IRepository
{
public interface ITestRepository
{
/// <summary>
/// 求和,這裏就是定義一下具體實現在 TestRepository
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
int Sum(int i, int j);
}
}
using WebApi.Core.IRepository;
namespace WebApi.Core.Repository
{
/// <summary>
/// 倉儲類
/// </summary>
public class TestRepository : ITestRepository
{
/// <summary>
/// 求和,倉儲實現,這個過程就是訪問數據庫得到數據,並且返回
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
public int Sum(int i, int j)
{
return i + j;
}
}
}
namespace WebApi.Core.IService
{
/// <summary>
/// 服務接口類
/// </summary>
public interface ITestService
{
/// <summary>
/// 求和聲明
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
int SumService(int i, int j);
}
}
using WebApi.Core.IRepository;
using WebApi.Core.IService;
namespace WebApi.Core.Service
{
public class TestService : ITestService
{
//改造成Autofac注入方式,聲明一個倉儲常量
private readonly ITestRepository test;
//構造函數注入
public TestService(ITestRepository testRepository)
{
test = testRepository;
}
/// <summary>
/// 求和,調用倉儲的求和方法,把參數傳遞給倉儲
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
public int SumService(int i, int j)
{
return test.Sum(i, j);
}
}
}
3.創建一個webapi .net core3.1項目
https://www.cnblogs.com/hlm750908/p/15907862.html
4.項目結構
5.安裝 autofac注入組件, 注意是 webapi 項目 ,上圖 5
Install-Package Autofac.Extras.DynamicProxy -Version 6.0.0
Install-Package Autofac.Extensions.DependencyInjection -Version 7.2.0
6.webapi 項目添加 AutofacModuleRegister.cs
using Autofac;
using Autofac.Extras.DynamicProxy;
public class AutofacModuleRegister : Autofac.Module
{
/// <summary>
/// 重寫Load函數
/// </summary>
/// <param name="builder"></param>
protected override void Load(ContainerBuilder builder)
{
//註冊Service
var assemblysServices = Assembly.Load("Webapi.Core.Service");
builder.RegisterAssemblyTypes(assemblysServices)
.InstancePerDependency()//默認模式,每次調用,都會重新實例化對象;每次請求都創建一個新的對象
.AsImplementedInterfaces()//是以接口方式進行注入,注入這些類的所有的公共接口作爲服務(除了釋放資源)
.EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;應用攔截器
//註冊Repository
var assemblysRepository = Assembly.Load("Webapi.Core.Repository");
builder.RegisterAssemblyTypes(assemblysRepository)
.InstancePerDependency()//默認模式,每次調用,都會重新實例化對象;每次請求都創建一個新的對象
.AsImplementedInterfaces()//是以接口方式進行注入,注入這些類的所有的公共接口作爲服務(除了釋放資源)
.EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;應用攔截器
}
}
7.改造 Program.cs
修改注入爲 autofac 黃色爲 添加代碼 ,下方 註釋代碼爲 原微軟代碼
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory()) //這裏是替換容器的,微軟默認的注入方式是DI,替換成autofac實例
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
//public static IHostBuilder CreateHostBuilder(string[] args) =>
// Host.CreateDefaultBuilder(args)
// .ConfigureWebHostDefaults(webBuilder =>
// {
// webBuilder.UseStartup<Startup>();
// });
}
8.控制器添加 服務調用類 WeatherForecastController.cs
//聲明一個常量
private readonly ITestService testService;
//構造函數注入 service
public WeatherForecastController(ITestService testS)
{
testService = testS;
}
/// <summary>
/// 測試倉儲模式,求和表示層
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
/// <returns></returns>
[HttpPost]
public int SumService(int i, int j)
{
//引用service層
//ITestService testService = new TestService();
return testService.SumService(i, j);
}
9.測試