分享

aspnetcore DI 多实例注入及获取

 新进小设计 2022-12-21 发布于北京

废话不说,直接代码

//注入  按单例模式注入RabbitMQ的ConnectionFactory
{
    var mqCfg = context.Configuration.GetSection("RabbitMQ").Get<RabbitMQCfg>();
    var cf = new ConnectionFactory()
    {
        HostName = mqCfg.HostName,
        Port = mqCfg.Port,

        UserName = mqCfg.UserName,
        Password = mqCfg.Password,

        VirtualHost = mqCfg.VirtualHost,
    };

    RabbitMQTools.Init(cf);

    services.AddSingleton(cf);
}
{
    var mqCfg = context.Configuration.GetSection("RabbitMQLogger").Get<MyRabbitMQLoggerProviderOptions>();
    var cf = new ConnectionFactory()
    {
        HostName = mqCfg.HostName,
        Port = mqCfg.Port,

        UserName = mqCfg.UserName,
        Password = mqCfg.Password,

        VirtualHost = mqCfg.VirtualHost,
    };

    RabbitMQTools.Init(cf);

    services.AddSingleton(cf);
}

获取方式也很简单,主要有两种

1.构造中接收

/// <summary></summary>
public TimedBackgroundService(IEnumerable<ConnectionFactory> svs)
{

}

2.GetServices接收

using (var sp = logbuild.Services.BuildServiceProvider())
{
    var mqFact2 = sp.GetServices<ConnectionFactory>();
    var mqFact = mqFact2.First(d => d.VirtualHost.EqualIgnoreCase("log"));
    var option = sp.GetService<IConfiguration>().GetSection("RabbitMQLogger").Get<MyRabbitMQLoggerProviderOptions>();

    logbuild.AddMyRabbitMQLog(mqFact, option);
}

还可以使用AspectCore的属性注入接收

[AspectCore.DependencyInjection.FromServiceContext]
private IEnumerable<ConnectionFactory>  svc { get; set; }

理论上支持  AddSingleton、AddTransient、AddScoped

over

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多