【问题标题】:What is the Microsoft.Extensions.DependencyInjection (IServiceCollection) equivalent of Ninject's Bind<TService>().ToMethod?Ninject 的 Bind<TService>().ToMethod 的 Microsoft.Extensions.DependencyInjection (IServiceCollection) 等效项是什么?
【发布时间】:2019-05-23 14:11:20
【问题描述】:

我曾经在Ninject中做过这样的事情:

kernel.Bind<IDatabase>().ToMethod(context =>
    RedisConnectionFactory.GetConnection().GetDatabase(              
int.Parse(ConfigurationManager.AppSettings["RedisConnectionIdsDatabase"])));

接口 IDatabase 绑定到方法。现在我已经切换到 dotnet core 并且我想知道 dotnet core 依赖注入器 是否能够做到这一点?

【问题讨论】:

  • 你试过了吗?
  • 如果我理解正确的话,你想创建一个工厂。看到这个:stackoverflow.com/questions/54127414/…
  • 我希望函数/方法返回 IDatabase 的实例,并且 DI 系统在声明时注入此实例。
  • 这是昨天提出的同一个问题:stackoverflow.com/questions/56260643/…。困惑(无论如何对我来说)是 Ninject 的术语非常不同。我通常听到这被描述为“使用工厂方法解析”。这是一个以陌生方式描述的熟悉概念。
  • @ScottHannen 这就是我的问题的答案。

标签: c# dependency-injection .net-core


【解决方案1】:

你可以这样做

services.AddTransient<IDatabase>((sp) =>
{
    return RedisConnectionFactory
        .GetConnection().GetDatabase(int.Parse(ConfigurationManager.AppSettings["RedisConnectionIdsDatabase"]));
});

【讨论】:

    【解决方案2】:

    不,不是。内置的 DI 容器非常基础,但它允许您使用任何您想要的容器,只要它公开 IServiceProvider 接口即可。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2018-11-12
      • 2012-10-16
      • 2010-10-01
      • 2016-03-20
      相关资源
      最近更新 更多