第十一节 深入剖析NopCommerce注册、注入依赖

在使用.NetCore进行简单的应用程序中的开发时,可以在Startup.cs文件的public IServiceProvider ConfigureServices(IServiceCollection services)方法中定义注入和注册语句,只有通过这些语句预定义或自定义好的一些服务或对象,才有可能直接通过服务或对象的接口实例直接调用其方法,如果没能注入和注册语句直接调用接口实例直接调用其方法出现一些异常。

其它.Net Core 应用程序对所有服务进行注入和注册的实现和定义是直接定义在Startup.cs文件中的,而NopCommerce应用程序对所有服务进行注入和注册的实现和定义却极其复杂和难以理解的,为了能够更加的容易深入理解,NopCommerce注册、注入依赖机制,下面将详细剖析NopCommerce应用程序的注入和注册是以怎样的调用顺序来实现的。

1NopCommerce应用程序中是把注入和注册的相关操作直接从Nop.Web项目的Startup.cs文件中移出,分别定义在Nop.Web.Framework项目和Nop.Core项目的Infrastructure文件夹中,同时结合Autofac实现对服务或对象的注入和注册。

2、第一步:使用Nop.Web.Startup类中的public IServiceProvider ConfigureServices(IServiceCollection services)方法调用services.ConfigureApplicationServices(_configuration, _hostingEnvironment)语句。

3、第二步:使用Nop.Web.Framework.Infrastructure.Extensions.ServiceCollectionExtensions类中的public static IServiceProvider ConfigureApplicationServices(this IServiceCollection services,

            IConfiguration configuration, IHostingEnvironment hostingEnvironment) 方法调用var serviceProvider = engine.ConfigureServices(services, configuration) 语句。

4、第三步:使用Nop.Core.Infrastructure.NopEngine类中的public IServiceProvider ConfigureServices(IServiceCollection services, IConfiguration configuration) 方法调用RegisterDependencies(services, typeFinder) 语句。

5第四步:使用Nop.Core.Infrastructure.NopEngine类中的protected virtual IServiceProvider RegisterDependencies(IServiceCollection services, ITypeFinder typeFinder) 方法调用foreach (var dependencyRegistrar in instances)

                dependencyRegistrar.Register(containerBuilder, typeFinder) 语句。同时NopCommerce应用程序是结合Autofac中间件,实现的注入和注册操作的,所以在此方法中定义一些Autofac中间件所需的语句。

6第五步:这也是最后一步,使用Nop.Web.Framework.Infrastructure.DependencyRegistrar类中的public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)在此方法中可以定义和调用NopCommerce应用程序中的所有服务。

使用Autofac中间件,实现的注入和注册操作,一般有两种方式:一是通过调用自定义的json文件,在json文件定义了服务所属项目的程序集名称;二是通过builder.RegisterAssemblyTypes(GetAssembly("Service")).AsImplementedInterfaces();方法调用指定程序集所属的dll文件, NopCommerce应用程序实质是通过自定义的AppDomainTypeFinder类调用服务所在的程序集所属的dll文件,也就是使用第二种方法来实现的服务的注入和注册操作

至于更新详细的信息请见我所上传代码“ 2019-06-27_MyNopCommerce_VS19Core2.2Nop4.20(不删004_数据库映射、仓储及连接)。 (https://download.csdn.net/download/zhoujian_911/11846580)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值