当前位置: 首页 > news >正文

wordpress智能内部搜索引擎优化

wordpress智能,内部搜索引擎优化,做网站app,网站建设桔子科技一、简介 前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或抽象工厂来扩展功能,就如IControllerAc…

一、简介

  前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或抽象工厂来扩展功能,就如IControllerActivator这样的功能点在上篇文章(查看.NET Core源代码通过Autofac实现依赖注入到Controller属性)中也提到了,今天我们主要介绍一个大类似的扩展点,ASP.NET Core MVC中为我们提供了新的机制为Action Filters(也就是过滤器)进行依赖注入的扩展。

二、过滤器依赖注入

  在ASP.NET Core MVC中,框架中为我们提供了类型为 IFilter 的 Attributes 来装饰Action,用于拦截Action请求,这有在以前的版本中就有了,但是如果我们想结合依赖注入使用的话要使用IFilterFactory接口来扩展Action Filter的创建过程。

  2.1 IFilterFactory接口定义

public interface IFilterFactory : IFilter
{IFilter CreateInstance([NotNull] IServiceProvider serviceProvider);
}

 

  我们想要创建一个Filter Attribute并需要依赖注入的话一般想要的代码为:

public class FilterClass : ActionFilterAttribute  
{public FilterClass(IDependency1 dependency1, IDependency2 dependency2){// ...use dependencies
  }
}

 

  ASP.NET Core MVC中为我们提供了两种简单的IFilterFactory ServiceFilterAttribute 和 TypeFilterAttribute 。来个例子看看怎么使用。

public class HomeController: Controller  
{[TypeFilter(typeof(FilterClass))][ServiceFilter(typeof(FilterClass))]public IActionResult Index(){return View();}
}

  2.2 ServiceFilterAttribute 

   其实看到名字,有些朋友就能想到了,它是基于依赖注入的一个IFilterFactory,Service这个词强化了它是一个通过获取服务来实现依赖注入的,大家想到了什么?是不是GetService()? 没错,其实它的机制就是这个。

     要使用ServiceFilter就必须在依赖注入容器里注册对应的类型,比如下面的例子就要先将FilterClass类型注册到IOC容器里。

public void ConfigureServices(IServiceCollection services)
{services.AddSingleton<FilterClass>();services.AddMvc()
}

  当然如果FilterClass类型的构造器需要注入类型时,也需要在IOC容器里进行注册才可以使用。

  我们来看下ServiceFilterAttribute的源代码:

public class ServiceFilterAttribute : Attribute, IFilterFactory, IOrderedFilter
{public ServiceFilterAttribute([NotNull] Type type){ServiceType = type;}public Type ServiceType { get; private set; }public int Order { get; set; }public IFilter CreateInstance([NotNull] IServiceProvider serviceProvider){var service = serviceProvider.GetRequiredService(ServiceType);var filter = service as IFilter;if (filter == null){throw new InvalidOperationException(Resources.FormatFilterFactoryAttribute_TypeMustImplementIFilter(typeof(ServiceFilterAttribute).Name,typeof(IFilter).Name));}return filter;}
}

  2.3 TypeFilterAttribute

   当然你也可以选择使用这个类似于ServiceFilter过滤器的TypeFilter过滤器,它也同样实现了IFilterFactory接口,并可以通过它创建出可使用依赖注入的过滤器来。之所以叫TypeFilter就是因为它并不需要在依赖注入容器里注册类型就能创建出过滤器,  我们来看下它的代码:

public class TypeFilterAttribute : Attribute, IFilterFactory, IOrderedFilter
{private ObjectFactory factory;public TypeFilterAttribute([NotNull] Type type){ImplementationType = type;}public object[] Arguments { get; set; }public Type ImplementationType { get; private set; }public int Order { get; set; }public IFilter CreateInstance([NotNull] IServiceProvider serviceProvider){if (this.factory == null){var argumentTypes = Arguments?.Select(a => a.GetType())?.ToArray();this.factory = ActivatorUtilities.CreateFactory(ImplementationType, argumentTypes ?? Type.EmptyTypes);}return (IFilter)this.factory(serviceProvider, Arguments);}
}

三、结语

  相信看过上一篇文章的朋友都注意到了ServiceProvider和ActivatorUtilities 的不同,本文中的ServiceFilterAttribute和 TypeFilterAttribute 原理上也是通过它们来创建Filter的,所以使用场景就看大家如何来使用。其实最近看.NET Core的源代码,看到的到处都是接口、工厂使用依赖注入形成扩展点的例子,其实微软以前代码的扩展点也挺多的,只是API并不那么开放,ASP.NET Core中我们看到了一个"开放"的框架。

 

  GitHub:https://github.com/maxzhang1985/YOYOFx  如果觉还可以请Star下, 欢迎一起交流。

 

  .NET Core 开源学习群: 214741894  

 

转载于:https://www.cnblogs.com/maxzhang1985/p/6094534.html

http://www.lbrq.cn/news/2522449.html

相关文章:

  • 社群营销平台有哪些凯里seo排名优化
  • 怎么做非法彩票网站网络推广员的工作内容和步骤
  • 网站自动发送邮件免费推广网站入口
  • 图片展示网站建设注册安全工程师
  • 网站推广必备的工具关键词你们都搜什么
  • 百度网盟有哪些网站百度搜索风云榜小说
  • 如何做网站卖衣服软件开发公司推荐
  • 商城网站公司影视站seo教程
  • 做一个网站如何做2022年新闻热点摘抄
  • 什么是网站开发技术友情链接交易购买
  • 网站开发的英文文献福建seo排名培训
  • 91大神网站建设培训心得体会1500字
  • 开源wordpress主题seo教程之关键词是什么
  • 优秀网站网址seo是什么服务器
  • 建设网站用户名是什么最新新闻摘抄
  • 平面设计师长逛的网站有哪些百度推广费
  • 外国一些做环保袋的网站全网营销老婆第一人
  • 厦门网站开发公司电话牡丹江网站seo
  • 网站建设 广西分析影响网站排名的因素
  • 中国建设银行泗水支行的网站公司网络推广该怎么做
  • 宁乡县建设局网站免费建网站的步骤
  • 辽宁响应式网站建设推荐2023年时政热点事件
  • 多语种网站建设开发北京百度关键词推广
  • 自己电脑做电影网站青岛官网seo方法
  • 怎么营销一个产品seo流量是什么意思
  • 怎样开通微商城平台seo排名影响因素主要有
  • iis做网站跳转seow
  • wordpress 分词 tag郑州网站seo
  • 专业做网文的网站最近发生的新闻
  • 100块钱开发网站seo的作用是什么
  • 算法训练营day36 动态规划④ 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
  • FFmpeg,如何插入SEI自定义数据
  • DNS污染与劫持
  • python基础:request请求Cookie保持登录状态
  • 【华为机试】20. 有效的括号
  • 数据库02 网页html01 day44