.net core 3.1倉儲架構搭建和autofac注入框架使用入門

 

 

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.測試

 

 

 

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