【问题标题】:Improve my NinjectBootstrapper static class.改进我的 NinjectBootstrapper 静态类。
【发布时间】:2017-08-11 09:22:58
【问题描述】:

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

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>();
     }

  }

}

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

【问题讨论】:

    标签: c#-4.0 design-patterns static singleton ninject


    【解决方案1】:

    我已经阅读了很多关于使用单例而不是静态类的内容。

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

    这也适用于启动路径中的代码,例如您的NinjectBootstrapper。您可以将其设为实例类,但由于此类在启动时直接启动,因此无需注入依赖项(显然,因为它是连接 DI 容器的东西),将其设为实例类通常是无用的.

    【讨论】:

    • 谢谢你的解释。的确,这确实是在启动时使用的。谢谢你的解释。我将保留我的代码。
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多