C# 依赖注入IServiceCollection的AddSingleton方法使用

本文介绍如何使用AddSingleton方法,通过Func<IServiceProvider,Object>委托来生成依赖服务实例,示例展示了如何利用已注册服务生成特定对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AddSingleton(IServiceCollection, Type, Func<IServiceProvider,Object>)方法

这个方法是通过提供一个Func<IServiceProvider,Object>的delegate委托来实现服务的实例获取。具体怎么用,下面给一个简单例子:

using System;
using Microsoft.Extensions.DependencyInjection;

class Program
{

    interface ITianChao
    {
        void hello();
    }
    class TianChao:ITianChao
    {
        public int A{get;set;}
        public int B{get;set;}
        public TianChao(int a, int b)
        {
            A = a;
            B = b;
        }

        void ITianChao.hello()
        {
            System.Console.WriteLine("hello");
        }
    }

    class Hongse
    {
        public TianChao GetTC()
        {
            return new TianChao(44,55);
        }
    }

    static void Main(string[] args)
    {
        IServiceCollection services = new ServiceCollection();
        services.AddSingleton(typeof(TianChao), sp => {
            var hs = sp.GetService<Hongse>();
            return hs.GetTC();
        });
        services.AddSingleton(new Hongse());
        IServiceProvider serviceProvider = services.BuildServiceProvider();
        object mything = serviceProvider.GetService<TianChao>();
    }
}

当代码运行到最后一行serviceProvider.GetService()的时候,会去调用执行AddSinglenton()方法提供的delegate委托代码(也就是39-40行代码),委托代码传入的参数sp就是代码中创建的serviceProvider本身,执行完毕返回需要的服务对象。
因此AddSingleton(IServiceCollection, Type, Func<IServiceProvider,Object>)这个重载便于我们利用已经存在服务容器中的服务来生成需要取得的服务对象。
额外的文章:
依赖注入那些事儿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮君

写作不易,多谢赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值