第十四节 配置管道请求

    在前十三节比较详尽和完整的讲述了nopCommerce应用程是怎样通过复杂的MVC配置服务,来调用数据库和生成数据中的表及其相关数据的。nopCommerce应用程同时也是通过一系列复杂的配置管道请求来实现页面的调用,下面将要讲述nopCommerce应用程是配置管道请求是怎样被定义的以及调用逻辑。

  • 重构Nop.Web.Startup类中的方法:

         public void Configure(IApplicationBuilder app)

        {

            app.ConfigureRequestPipeline();

            //app.UseMvc(routes =>

            //{

            //    routes.MapRoute(

            //        name: "default",

            //        template: "{controller=Setting}/{action=Create}/{id?}");

            //});

   }

  • 添加Nop.Web.Framework.Infrastructure.Extensions.ApplicationBuilderExtensions类的定义。
  • Nop.Core.Infrastructur.NopEngineNop.Core.Infrastructure.IEngine类和接口中添加public void ConfigureRequestPipeline(IApplicationBuilder application) 类的声明和定义。
  • (1)、重构INopStartup接口,在该接口添加void Configure(IApplicationBuilder application)方法的声明。

(2)、重构Nop.Web.Framework.Infrastructure.NopDbStartupNop.Web.Framework.Infrastructure. NopMvcStartup类在这两个类中添加public void Configure(IApplicationBuilder application)方法的定义。

  • 添加如图中所选择类的定义:

  • 重构Nop.Web.Framework.Infrastructure.Extensions.ServiceCollectionExtensions

(1)、添加方法public static TConfig ConfigureStartupConfig<TConfig>(this IServiceCollection services, IConfiguration configuration) where TConfig : class, new()

(2)、在public static IServiceProvider ConfigureApplicationServices(this IServiceCollection services,

            IConfiguration configuration, IHostingEnvironment hostingEnvironment)方法中,添加下列语句:

//添加nopconfig配置参数。

var nopConfig = services.ConfigureStartupConfig<NopConfig>(configuration.GetSection("Nop"));

 

 //添加宿主配置参数。

services.ConfigureStartupConfig<HostingConfig>(configuration.GetSection("Hosting"));

(3)、public static IMvcBuilder AddNopMvc(this IServiceCollection services) 方法中,添加下列语句:

 

            //我们使用传统的(来自以前版本的)路由逻辑.

            mvcBuilder.AddMvcOptions(options => options.EnableEndpointRouting = false);

//添加流畅验证.

            mvcBuilder.AddFluentValidation(configuration =>

            {

                //从nop程序集中注册所有可用的验证器。

                var assemblies = mvcBuilder.PartManager.ApplicationParts

                    .OfType<AssemblyPart>()

                    .Where(part => part.Name.StartsWith("Nop", StringComparison.InvariantCultureIgnoreCase))

                    .Select(part => part.Assembly);

                configuration.RegisterValidatorsFromAssemblies(assemblies);

 

                //子属性的隐式/自动验证。

                configuration.ImplicitlyValidateChildProperties = true;

            });

7、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar

(1)、在  public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)方法中,添加下列语句:builder.RegisterType<RoutePublisher>().As<IRoutePublisher>().SingleInstance();

8、按F5发现Nop.Web.Framework.Localization.LocalizedRoute类中的SeoFriendlyUrlsForLanguagesEnabled属性在执行_seoFriendlyUrlsForLanguagesEnabled = EngineContext.Current.Resolve<LocalizationSettings>().SeoFriendlyUrlsForLanguagesEnabled;语句时发生异常:System.NullReferenceException:Object reference not set to an instance of an object.

        由于本程序的代码在2019-10-10_MyNopCommerce_VS19Core2.2Nop4.20(不删004_数据库映射、仓储及连接)的基础上进行重构,同时在Nop.Web.Framework.Mvc.Routing.RoutePublisher类中定义了public virtual void RegisterRoutes(IRouteBuilder routeBuilder)方法

解决上述异常需要在Nop.Web.Framework.Infrastructure.DependencyRegistrar

(1)、在  public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)方法中,添加下列语句:

//注册所有设置

builder.RegisterSource(new SettingsSource());

(2)、Nop.Web.Framework.Infrastructure.DependencyRegistrar添加public class SettingsSource : IRegistrationSource类的定义,先在Home/Index页面中的string str = "";语句中定义下端点,然后按F5发现上述异常已经被解决,同时Home/Index页面已经可以正常启动了,至此配置管道请求的所有代码和定义已经全部完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值