.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 - 博客园

浙公网安备 33010602011771号