autofac 仓储_.Net core 搭建 仓储模式+SqlsugarORM+AutoFac(转)

本文介绍了如何在.NET Core中使用仓储模式,结合Autofac实现依赖注入,以降低耦合度。通过创建接口和实现类,演示了仓储和业务服务层的构建。接着引入Autofac进行服务注册,解决了手动实例化的耦合问题。此外,还展示了如何处理接口的多实例注入,确保正确注入所需的服务。最后,文章通过引入Sqlsugar ORM,将仓储模式改造为异步操作,实现了数据库的CRUD操作。
摘要由CSDN通过智能技术生成

一、为什么使用仓储模式

个人觉得仓储模式就是升级版的三层架构,里面多了接口之间的调用,就好像仓库管理员,只是负责把仓库里面的东西交给客户,也无需知道客户要做什么,反之客户也无需知道东西在哪里,怎么存放的,需要的时候就跟管理员索要就可以了,这样就是低耦合,就算管理员换人了,客户的流程也无需做出改变,反之亦然。

实际做一遍就一目了然了。

第一步:先把类库创建好

Common类库,公共类库,放一些公共的类和方法,比如,Helper类 字符串转换,编码格式这些。

IRepositry、Repository仓储层,负责处理数据 就是ADO。net那套东西。

IService、Service 业务服务层,三层架构的BLL。

Model 存放实体类

仓储层,创建ITestRepository和TestRepository,这里我们先不连接数据库,下面讲到ORM的时候在连库。

然后在服务层,创建ITestService和TestService类

代码如下,最好不要复制粘贴,自己一个一个创建,这样能更好的了解,哪个类库是做什么的,要怎么做

usingSystem;namespaceWebApi.Core.IRepository

{public interfaceITestRepository

{///

///求和,这里就是定义一下具体实现在 TestRepository///

///

///

///

int Sum(int i, intj);

}

}usingSystem;usingWebApi.Core.IRepository;namespaceWebApi.Core.Repository

{///

///仓储具体实现类,继承仓储接口类///

public classTestRepository:ITestRepository

{///

///求和,仓储实现,这个过程就是访问数据库得到数据,并且返回///

///

///

///

public int Sum(int i, intj)

{return i +j;

}

}

}usingSystem;namespaceWebApi.Core.IService

{///

///业务服务接口层///

public interfaceITestService

{///

///求和声明///

///

///

///

int SumService(int i, intj);

}

}usingSystem;usingWebApi.Core.IRepository;usingWebApi.Core.IService;usingWebApi.Core.Repository;namespaceWebApi.Core.Service

{public classTestService:ITestService

{//这里如果要用到仓储,需要先创建对象,就好像要知道管理员是谁,这个先这么写,后期改成AutoFac的

ITestRepository test = newTestRepository();///

///求和,调用仓储的求和方法,把参数传递给仓储///

///

///

///

public int SumService(int i, intj)

{returntest.Sum(i,j);

}

}

}

好了一个简单的仓储模式算是搭建完成了,接下来我们测试一下,创建一个Controller名字随便取,在里面添加如下代码

///

///测试仓储模式,求和表示层///

///

///

///

[HttpPost]public int SumService(int i, intj)

{//引用service层

ITestService testService = newTestService();returntestService.SumService(i,j);

}

F5启动一下,我们测试一下,从测试结果看,是没有任何问题的

接下来,我们在仓储模式下增加IOC,上面写的时候会发现一些new 实体的 代码,这样的耦合性就很强了,所以需要使用IOC模式来处理这种耦合,这里我们用.net架构比较常用的Autofac

Nuget包引入两个 Autofac.Extras.DynamicProxy、Autofac.Extensions.DependencyInjection

新建一个类来存放Autofac注册Module,如下代码

usingAutofac;usingAutofac.Extras.DynamicProxy;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Reflection;usingSystem.Threading.Tasks;namespaceWebApi.Core.Api.SetUpService

{///

///Autofac注册服务类///

public classAutofacModuleRegister:Autofac.Module

{///

///重写Load函数///

///

protected override voidLoad(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;应用拦截器

}

}

}

在startup.cs文件中,增加一个方法,用来配置Autofac服务容器,在Configure方法下面,新建如下代码

///

///注册Autofac容器///

///

public voidConfigureContainer(ContainerBuilder builder)

{

builder.RegisterModule(newAutofacModuleRegister());

}

在program.cs 文件中 初始化一下实例代码如下

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args)

.UseServiceProviderFactory(new AutofacServiceProviderFactory()) //这里是替换容器的,微软默认的注入方式是DI,替换成autofac实例

.ConfigureWebHostDefaults(webBuilder =>{

<
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值