将配置传递给Ninject

时间:2016-02-16 05:10:24

标签: c# ninject

我需要将IConfiguration传递给我的DbClient类,我的存储库依赖于这个DbClient。我无法让它发挥作用。

我的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;
   }
}

My Bindings 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并确保存储库正确初始化,我需要做什么?

1 个答案:

答案 0 :(得分:1)

您需要绑定IConfiguration 您可以在Load方法中执行此操作:

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

Main方法:

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

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

也不需要行Bind<DbClient>().To<DbClient>();,因为DbClient会自动绑定到自己。