.net Core (2)

生命周期

services.AddTransient<IClock, ChinaClock>(); // 瞬时生命周期
services.AddSingleton<IClock, ChinaClock>(); //单例--进程唯一实例
services.AddScoped<IClock, ChinaClock>();   
//作用域单例(容器实例单例)---一个请求一个实例

对于Scoped,作用域就是CreateScope.只要是一个Scope就是相同的,下面是相同的

      var contain = services.BuildServiceProvider();
      {
            var C1 = contain.CreateScope().ServiceProvider.GetService<IClock>();
            var C2 = contain.CreateScope().ServiceProvider.GetService<IClock>();
       }

注:不建议太多单例,仅适合需要单例的(配置文件,容器实例,连接池等),摒弃传统单例
      大部分为瞬时的生命周期
      请求单例,一个HTTp请求是一个单例,一次请求会创建一个容器      

AOP

面向切面编程(Aspect Orientend Programming)

不破坏封装的前提下额外拓展功能

对于Asp.net core 3.x ,引用:

using Microsoft.AspNetCore.Mvc.Filters;

    public class CustomExceptionFilterAttribute: ExceptionFilterAttribute
    {
        public override void OnException(ExceptionContext context)
        {
            if (!context.ExceptionHandled)
            {
                context.Result = new JsonResult(new
                {
                    Result = false,
                    Msg = ""
                });
            }
            base.OnException(context);
        }
    }
    [CustomExceptionFilterAttribute]
    public class DepartmentController : Controller 
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews(options=>
            {
                options.Filters.Add(typeof(CustomExceptionFilterAttribute));
            });

action 注册

控制器注册

全局注册

Filter  的四种注册方式

  • 全局注册 (同上)
  • ServiceFilter
    [ServiceFilter(typeof(CustomExceptionFilterAttribute))]
    public class DepartmentController : Controller


//需要注册
 services.AddTransient<CustomExceptionFilterAttribute>();

 

  • TypeFilter
 [TypeFilter(typeof(CustomExceptionFilterAttribute))]

  • IFilterFactory
 //一个属性   
 public class CustomFilterFactoryAttribute : Attribute, IFilterFactory
    {

        private Type _FilterType = null;
        public CustomFilterFactoryAttribute(Type type)
        {
            this._FilterType = type;
        }

        public bool IsReusable => true;

        public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
        {
            //IServiceProvider 是一个容器
            //IFilterMetadata 是一个空接口,是为了标识
            return (IFilterMetadata)serviceProvider.GetService(this._FilterType);
        }
    }



//标记

    [CustomFilterFactory(typeof(CustomFilterFactoryAttribute))]

//注册

     services.AddTransient<CustomFilterFactoryAttribute>();

 顺序是就近原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值