• MVC


    模块对常用组件、服务进行服务注册,可以mvcCoreBuilder、mvcbuilder进行配置,Option的配置,如本地化,MvcOption,AbpAspNetCoreMvcOptions对自动API的控制器,特别是对ApplicationPartManager的part和feature管理

      

    1、配置自动注入,要求是Controller、ViewComponent、PageModel的实现,或者配置Attribute特性,统一是Transient类型

    2、Configure Razor 用到ConfigureOptions<MvcRazorRuntimeCompilationOptions>,配置它的FileProviders是RazorViewEngineVirtualFileProvider

    即是IVirtualFileProvider

    3、AbpApiDescriptionModelOptions

        IgnoredInterfaces = new HashSet<Type>
                {
                    typeof(ITransientDependency),
                    typeof(ISingletonDependency),
                    typeof(IDisposable),
                    typeof(IAvoidDuplicateCrossCuttingConcerns)
                };
    增加

    options.IgnoredInterfaces.AddIfNotContains(typeof(IAsyncActionFilter));
    options.IgnoredInterfaces.AddIfNotContains(typeof(IFilterMetadata));
    options.IgnoredInterfaces.AddIfNotContains(typeof(IActionFilter));

     

    4、增加注册AddMvcCore(),返回类型是mvcCoreBuilder

    context.Services.ExecutePreConfiguredActions(mvcCoreBuilder);

    上面这句话的意思是,可以在前面自定义配置,使用Context.Services.PreConfigure<mvcCoreBuilder>(mvcCoreBuilder=>{配置委托})

     同理对AbpMvcDataAnnotationsLocalizationOptions类型,如

       options.AddAssemblyResource(
                        typeof(MvcTestResource),
                        typeof(AbpAspNetCoreMvcTestModule).Assembly
                    );

    而且将IOptions<AbpMvcDataAnnotationsLocalizationOptions>,使用new OptionsWrapper ??应该是Configure<Option>()是相同的效果??

    增加Imvcbuilder,扩展方法增加AddNewtonsoftJson,AbpMvcJsonContractResolver,增加AddRazorRuntimeCompilation对Razor的编译

    context.Services.AddMvc()

    Func<Type, IStringLocalizerFactory, IStringLocalizer> 对于创建IstringLocalizer使用DataAnnotationLocalizerProvider,根据类型的Assembly找到对应的Resource

    再增加View Localization的服务到应用,也可以对IMvcbuilder进行配置,注入IActionContextAccessor,负责自动创建APi服务的ServiceBasedControllerActivator

    创建ViewComponent的 ServiceBasedViewComponentActivator

    ApplicationPartManager管理的parts和features

    配置MvcOptions

    AddConventions(options, services);
    AddFilters(options);
    AddModelBinders(options);
    AddMetadataProviders(options, services);

    在应用初始化时增加程序集的ApplicationParts,插件集直接添加 ,否则要求的是ConventionalControllerSetting下的Assembly

    即:AbpAspNetCoreMvcOptions》AbpConventionalControllerOptions》ConventionalControllerSettingList》ConventionalControllerSetting (包括关系)

    即是在配置自动的API控制器,它会增加到ConventionalControllerSettingList列表,这个ConventionalControllerSettingAssembly会增加到ApplicationParts

     Configure<AbpAspNetCoreMvcOptions>(options =>
            {
                options
                    .ConventionalControllers
                    .Create(typeof(BookStoreApplicationModule).Assembly);
            });

     又因为FeatureProviders增加了AbpConventionalControllerFeatureProvider,重写什么是IsController方法,ConventionalControllerSetting下面ControllerTypes包含的类型,而这个类型在Create的方法将它个程序集下所有IRemoteService(可以继承,也可以设RemoteServiceAttribute)添加进去,实现IRemoteService的方法有ApplicationService,增加委托方法,可以将下面的委托进行操作

    这个RootPath="app",TypePredicate,ControllerModelConfigurer,UrlControllerNameNormalizer,UrlActionNameNormalizer,ApiVersionConfigurer,List<ApiVersion>

     在MvcOption下 options.Conventions.Add(new AbpServiceConventionWrapper(services)); 它增加了其中IApplicationModelConvention的,Abp将自定义的包装AbpServiceConventionWrapper添加了进去,它可以Controller进行自定义设置

    ApplicationModel,是存储对象有

    ApiExplorerModel:主要是配置默认MVC Api Explorer的一些东西,包括Api的描述信息,组信息,可见性等

    ControllerModel:主要是 Comtroller 默认约定相关的了 IList<ControllerModel>记录了程序集所有Controller信息,可以自定义设置

    IFilterMetadata :空接口,主要起到标记的作用。

    ApiExplorer.visible是默认true.包括Controller以及Action

    Selector:包括controller和action

    ActionConstraints:即Get POST方法

    AttributeRouteModel:AttributeRouteModel即路由关系,增加路由关系;RouteTemplate:Api/app/

    EndpointMetadata :包括Attribute

    Parameter:BindingInfo

        /* Default binding system of Asp.Net Core for a parameter
                 * 1. Form values
                 * 2. Route values.
                 * 3. Query string.
                 */

    Abp在不是"GET", "DELETE", "TRACE", "HEAD"方法上,即主要是Post、Put、Patch方法上增加了FromBodyAttribute

    避免横切关注点重复执行,目标是AbpController和ApplicationService,在ActionFilter里面增加了Audit和Feature拦截器

    那么自己的拦截器就不要使用了,

     

  • 相关阅读:
    程序是如何在 CPU 中运行的(二)
    程序是如何在 CPU 中运行的(一)
    结构体内存对齐解析
    如何以面向对象的思想设计有限状态机
    union 的概念及在嵌入式编程中的应用
    STM32 内存分配解析及变量的存储位置
    C语言如何实现继承及容器
    C语言指定初始化器解析及其应用
    pandas中的 where 和mask方法
    python中的类变量
  • 原文地址:https://www.cnblogs.com/cloudsu/p/12021840.html
Copyright © 2020-2023  润新知