改进我的 Ninject Bootstrapper 静态 class。

Improve my NinjectBootstrapper static class.

一个NinjectBootstrapper class 已在服务项目中创建(负责获取产品)。 这是我的代码

public static class NinjectBootstrapper
{
   private static readonly object _thislock = new object();

   //flag to prevent bootstrap for executing multiple times
   private static bool _done;

   public static void Bootstrap()
  {
     lock(_thislock)
     {
        if(_done)
        {
           return;
        }
        _done = true;

       // services
       NinjectContainer.Kernel.Bind<IProductService>().To<ProductService>();
       // repositories
       NinjectContainer.Kernel.Bind<IProductRepository>().To<ProductRepository>();
     }

  }

}

现在,虽然这可行,但我真的很想知道是否有更好的方法来重构我的代码。例如,我已经阅读了很多关于使用单例而不是静态 class 的内容。 我真的想在这里打下良好的基础,让未来的开发人员能够轻松灵活地扩展功能。我可以考虑哪些好的建议和技巧?

I've read a lot of stuff about using a singleton instead of the static class.

在应用 DI 时,我们通常更喜欢实例 classes 而不是静态 classes,因为我们无法在静态 [=19] 中练习 构造函数注入 =]是的。然而,这并不意味着静态 classes 是一种不好的做法。当 classes 没有依赖关系也没有状态时,static 就可以了。

这也适用于启动路径中的代码,例如您的 NinjectBootstrapper。你可以使它成为一个实例 class,但是由于这个 class 是在启动时直接启动的,所以不需要注入依赖项(显然,因为它是连接 DI 容器的东西),它通常会使它成为一个实例是没用的 class.