首页 > 其他分享 >对于键控服务的一次简单封装

对于键控服务的一次简单封装

时间:2025-01-21 15:09:43浏览次数:1  
标签:封装 TBase 简单 AddServices 键控 Transient typeof ServiceLifetime type

注:该写法仅适用于 .NET 8 及以上

public static class ServiceCollectionExtensions
{
    public static void AddServices<TBase>(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Transient, Assembly? assembly = null)
    {
        assembly ??= typeof(TBase).Assembly;

        var types = assembly.GetTypes()
                            .Where(t => typeof(TBase).IsAssignableFrom(t) && t.IsClass && !t.IsAbstract)
                            .ToList();

        foreach (var type in types)
        {
            string? key = type.FullName;

            if (string.IsNullOrWhiteSpace(key))
            {
                continue;
            }

            switch (lifetime)
            {
                case ServiceLifetime.Scoped:
                    services.AddScoped(typeof(TBase), type);
                    break;
                case ServiceLifetime.Singleton:
                    services.AddSingleton(typeof(TBase), type);
                    break;
                case ServiceLifetime.Transient:
                default:
                    services.AddTransient(typeof(TBase), type);
                    break;
            }
        }
    }
}
// 很适合策略模式~

builder.Services.AddServices<AStrategy>(ServiceLifetime.Transient);
builder.Services.AddServices<BStrategy>(ServiceLifetime.Transient);
builder.Services.AddServices<CStrategy>(ServiceLifetime.Transient);

标签:封装,TBase,简单,AddServices,键控,Transient,typeof,ServiceLifetime,type
From: https://www.cnblogs.com/1gcat/p/18683613

相关文章

  • 一个简单的PHP单文件路由类示例
    <?phpclassRouter{protected$routes=array();protected$basePath;publicfunction__construct($basePath=null){if($basePath){$this->basePath=rtrim($basePath,'/');}else{......
  • 关于双塔模型的简单介绍
            双塔模型是一种常用于推荐系统和信息检索等领域的深度学习架构,其核心思想是将用户和物品分别映射到不同的向量空间,通过计算两个向量的相似度来预测用户对物品的偏好或相关性。1.python示例 使用python语言来简单示例一下实现过程如下:importtensorflowas......
  • 团体程序设计天梯赛-练习集——L1-014 简单题
    前言简单题L1-014简单题这次真的没骗你——这道超级简单的题目没有任何输入。你只需要在一行中输出事实:Thisisasimpleproblem.就可以了。输入样例:无输出样例:Thisisasimpleproblem.太简单了这就是另一种形式的著名短句HelloWorld形式不变,接着看看......
  • 【Aegisub】简单特效实现方法
    目录字幕横向滚动字幕竖向滚动竖向字幕字幕抖动字幕横向滚动Banner;<滚动速度>;<滚动方向>;<字体边缘模糊度>滚动速度:只能为正整数,小数负数和0无效。滚动方向:0(字幕开头从右向左移动)和1(字幕结尾从左向右移动)。字体边缘模糊度:没别的设定写0就行。一般用来做高速神言和打......
  • SM9 - 密钥封装机制和公钥加密算法
    符号A,B:使用公钥密码系统的两个用户。\(cf\):椭圆曲线阶相对于\(N\)的余因子。\(cid\):用一个字节表示的曲线的标识符,其中\(\mbox{0x10}\)表示\(F_p\)(素数\(P>2^{191}\))上常曲线(即非超奇异曲线),\(\mbox{0x11}\)表示\(F_p\)表示超奇异曲线,\(\mbox{0x12}\)表示\(F_p\)上常曲线及其扭......
  • 请用js实现一个简单的小区楼的电梯运行程序
    在前端开发中,实现一个简单的小区楼电梯运行程序可以通过模拟电梯的基本行为来完成。以下是一个使用JavaScript实现的简单电梯模拟程序,它允许用户选择楼层并模拟电梯的上下行。HTML部分(用于创建用户界面):<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • 简单日志宏实现(C++)
    意义:快速定位程序运行逻辑出错的位置。背景:项目在运行中可能会遇到各种问题,而出问题是开发过程中不可避免的一部分。关键在于能够有效地找到,并解决问题。解决问题的方式:GDB调试:适用于:程序崩溃后的定位。局限性:逐步调试过程繁琐且耗时较长。系统运行日志分析:方法:在......
  • libsql bottomless 集成minio 简单使用
    libsql支持bottomless可以方便的将wal数据存储在s3中(基于了虚拟wal接口实现),以下是一个简单使用环境准备docker-compose环境开启了namespace以及集成主从服务services:db1:image:ghcr.io/tursodatabase/libsql-server:latestentrypoint:/bin/sqld--db-p......
  • 使用PythonDEAP库实现简单遗传算法
    ​本人博客食用体验更佳哦DEAP(DistributedEvolutionaryAlgorithmsinPython)是一个用于快速原型设计和实验的进化计算框架。它支持多种进化算法,包括遗传算法、遗传编程、进化策略、粒子群优化等。DEAP的设计目标是灵活性和易用性,使得研究人员和开发者能够轻松地实现和测试各......
  • 电脑 CMD 命令大全:简单粗暴收藏版
    说到CMD(命令提示符)命令,废话不多说,直接列命令和解释,网工必备,排障神器!系统操作类dir:列出当前目录下的所有文件和文件夹。cd:切换当前目录。md/rd:创建或删除文件夹。copy/xcopy:复制文件或目录。tasklist:查看当前运行的进程。taskkill:结束指定任务或进程。shutdown:执行定时......