.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添加 对两个接口项目的引用

WebApi.Core.IRepository 仓储接口类

WebApi.Core.IService 服务接口类

 

设置 服务类和 仓储类 编译的输出路径 为webapi的输出路径

 

7.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)

{

string path = Directory.GetCurrentDirectory();

//注册Service

var assemblysServices = Assembly.LoadFile(path+ @"\bin\debug\netcoreapp3.1\WebApi.Core.Service.dll");

builder.RegisterAssemblyTypes(assemblysServices)

.InstancePerDependency()//默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象

.AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)

.EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;应用拦截器

 

//注册Repository

var assemblysRepository = Assembly.LoadFile(path + @"\bin\debug\netcoreapp3.1\WebApi.Core.Repository.dll");

builder.RegisterAssemblyTypes(assemblysRepository)

.InstancePerDependency()//默认模式,每次调用,都会重新实例化对象;每次请求都创建一个新的对象

.AsImplementedInterfaces()//是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)

.EnableInterfaceInterceptors(); //引用Autofac.Extras.DynamicProxy;应用拦截器

}

}

8.改造 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>();

// });

}

 

9.startup.cs添加注入方法

 

/// <summary>

/// 注册Autofac容器

/// </summary>

/// <param name="builder"></param>

public void ConfigureContainer(ContainerBuilder builder)

{

builder.RegisterModule(new AutofacModuleRegister());

}

 

10.控制器添加 服务调用类 WeatherForecastController.cs

 

下面的代码是错误的

//声明一个常量

private readonly ITestService testService;

//构造函数注入 service

public WeatherForecastController(ITestService testS)

{

testService = testS;

}

 

不可以有2个构造函数,按下面的来改造

 

//声明一个常量

private readonly ITestService testService;

public WeatherForecastController(ILogger<WeatherForecastController> logger, ITestService test)

{

_logger = logger;

testService = test;

}

 

/// <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);

}

 

11.测试

 

http://localhost:54607/swagger/index.html

 

 

 

 

全文完,按此文一定可以试验成功

 

本文参考: 感谢作者

.Net core 搭建 仓储模式+SqlsugarORM+AutoFac - srsly - 博客园

https://www.cnblogs.com/xiaojinFat/p/13346380.html

posted @ 2022-02-18 11:40  网络来者  阅读(607)  评论(0)    收藏  举报