分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

asp.net core ioc 依赖注入

发布时间:2023-09-06 02:24责任编辑:赖小花关键词:暂无标签

1.生命周期

内置的IOC有三种生命周期:
Transient: Transient服务在每次被请求时都会被创建。这种生命周期比较适用于轻量级的无状态服务。
Scoped: Scoped生命周期的服务是每次web请求被创建。
Singleton: Singleton生命能够周期服务在第一被请求时创建,在后续的每个请求都会使用同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和生命周期管理,而不是自己来走这些事情。

在Startup的ConfigureServices方法中

调用方法services.AddSingleton(typeof(IMyService),new MyService());
也可以services.AddSingleton(typeof(IMyService),typeof(MyService));
最好还是services.AddSingleton<IMyService, MyService>();

因为这样的话可以在MyService中通过构造函数注入其他服务。

2.注册程序集的所有类

 ???????????//通过反射把所有服务接口进行了注入: ????????????var serviceAsm = Assembly.Load(new AssemblyName("Service")); ???????????foreach (Type serviceType in serviceAsm.GetTypes() ???????????.Where(t => typeof(IServiceTag).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract)) ???????????{ ???????????????var interfaceTypes = serviceType.GetInterfaces(); ???????????????foreach (var interfaceType in interfaceTypes) ???????????????{ ???????????????????services.AddSingleton(interfaceType, serviceType); ???????????????} ???????????}

3.其他类注入

在其他类怎么使用注入?假如在ExceptionFilter中想调用IUserService怎么办?要确保ExceptionFilter不是new出来的,而是IOC创建出来

services.AddSingleton<ExceptionFilter>(); //mvc core中注册filter要在AddMvc的回调方法中注册。services.AddMvc(options =>{ ???var serviceProvider = services.BuildServiceProvider(); ???var filter = serviceProvider.GetService<ExceptionFilter>(); ???options.Filters.Add(filter);}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

asp.net core ioc 依赖注入

原文地址:https://www.cnblogs.com/tangge/p/10050670.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved