惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
博客园_首页
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
月光博客
月光博客
小众软件
小众软件
S
SegmentFault 最新的问题
量子位
阮一峰的网络日志
阮一峰的网络日志
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 落叶子

FreeRedis 实现消费确认队列和消费延时确认队列 快速部署单机k3s+Kuboard控制面板 解决微软鼠标设置宏后桌面有效果 进游戏就没有效果了 .net core 使用QRCoder在linux 下生成带logo的二维码 FreeScheduler 在asp.net core 中使用依赖注入的方式进行注入使用 GC 性能调优相关 .net 中使用OpenCvSharp 判断一张图片中是否包含指定图标 maui BlazorWebView+本地html (vue、uniapp等都可以) 接入支付宝sdk 进行支付宝支付 开发 Android app maui BlazorWebView+本地html (vue、uniapp等都可以) 接入微信sdk 开发 Android app maui BlazorWebView+本地html 打包Android app 实现支付宝H5支付 maui WebView 打包Android app 实现线上网页 支付宝H5支付 maui BlazorWebView Android 中混合使用https和http 原生js+html+css 实现大转盘抽奖效果,实现人员占位,转盘缓慢停止时依次显示奖品图片 Serilog日志同步到redis中和自定义Enricher来增加额外的记录信息 C#、 .net 修改和移除 url 中的参数 windows 批量删除docker 镜像 uniapp 原生websocket 使用 signalr k8s docker 中部署think php 并搭建php websocket .net core Unicode 转中文
c# .net 多类实现同一个接口,动态指定使用哪一个类的实现
落叶子 · 2022-12-15 · via 博客园 - 落叶子
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Runtime.CompilerServices;
using static System.Net.Mime.MediaTypeNames;

namespace WebApplication3
{
    public interface IBase<T>
    { 
        T GetSelf();
    }
    public interface ITool: IBase<ITool>
    {
        string MethorName();
        
    }
    public class Base<T> : IBase<T>
    {
        private readonly IServiceScopeFactory _serviceScopeFactory;
        public Base(IServiceProvider serviceProvider) {
            _serviceScopeFactory = serviceProvider.GetRequiredService<IServiceScopeFactory>();
        }
        public T GetSelf()
        {
            using (var scope = _serviceScopeFactory.CreateScope())
            {
                var enumerable = scope.ServiceProvider.GetRequiredService<IEnumerable<T>>();
                string name = RedisHelper.Get("TypeName");
                var iTool = enumerable.Where(m => m.GetType().Name == name).FirstOrDefault() ?? enumerable.First();
                return iTool;
            }
        }
    }
    public class  Stool: Base<ITool>, ITool
    {
        public Stool(IServiceProvider serviceProvider) : base(serviceProvider)
        {
        }
        public string MethorName()
        {
           
            return "Stool";
        }
     
    }
    public class Rtool : Base<ITool>,ITool
    {
        public Rtool(IServiceProvider serviceProvider) : base(serviceProvider)
        {
        }
        public string MethorName()
        {
            return "Rtool";
        }

       
    }
}
using Microsoft.AspNetCore.Mvc;

namespace WebApplication3.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

        private readonly ILogger<WeatherForecastController> _logger;
       
        private readonly ITool _tool;
        public WeatherForecastController(ILogger<WeatherForecastController> logger, ITool tool)
        {
            _logger = logger;
            _tool= tool.GetSelf();
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            _logger.LogWarning("MethorName=" + _tool.MethorName());
        
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}
namespace WebApplication3
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.

            builder.Services.AddControllers();

            builder.Services.AddScoped<ITool, Stool>();
            builder.Services.AddScoped<ITool, Rtool>();
            var csredis = new CSRedis.CSRedisClient($"127.0.0.1:6379,defaultDatabase=1,prefix=test:");
            RedisHelper.Initialization(csredis);
            var app = builder.Build();

            // Configure the HTTP request pipeline.

            app.UseAuthorization();


            app.MapControllers();

            app.Run();
        }
    }
}