aspnetcore DI 多實例注入及獲取

aspnetcore DI 多實例注入及獲取,第1張

廢話不說,直接代碼

//注入  按單例模式注入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>publicTimedBackgroundService(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

 


生活常識_百科知識_各類知識大全»aspnetcore DI 多實例注入及獲取

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情