将配置传递给 Ninject

Passing configuration to Ninject

我需要将 IConfiguration 传递到我的 DbClient class 并且我的存储库依赖于此 DbClient。我无法让它工作。

我的数据库客户端:

public class DbClient
{
   public DbClient(IConfiguration config)
   {
      // Perform some initialization
   }
}

我的存储库依赖于 DbClient:

public class MyRepository : IMyRepository
{
   private DbClient _client;
   public MyRepository(DbClient client)
   {
      _client = client;
   }
}

我的绑定class

public class NinjectBindings : NinjectModule
{
   public override void Load()
   {
      Bind<DbClient>().To<DbClient>(); // ?? Not sure about this
      Bind<IMyRepository>().To<MyRepository>();
   }
}

我的控制台应用程序中的 Main:

static void Main()
{
   var config = new Configuration();
   config.AddJsonFile("settings.json");

   var kernel = new StandardKernel();
   kernel.Load(Assembly.GetExecutingAssembly());

   var myRepository = kernel.Get<IMyRepository>();
}

我错过了什么?我需要做什么才能将 IConfiguration 传递到 DbClient 并确保存储库正确初始化?

您需要绑定IConfiguration.
你可以在 Load 方法中做到这一点:

Bind<IConfiguration>().ToMethod(ctx =>
{
    var config = new Configuration();
    config.AddJsonFile("settings.json");
    return config;
});

或者在Main方法中:

kernel.Bind<IConfiguration>().ToMethod(...);

绑定类型取决于您的需要。也许您应该将配置绑定为不依赖上下文的常量。

另外行 Bind<DbClient>().To<DbClient>(); 不是必需的,因为 DbClient 会自动绑定到自己。