Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 改进我的NinjectBootstrapper静态类。_C# 4.0_Design Patterns_Static_Singleton_Ninject - Fatal编程技术网

C# 4.0 改进我的NinjectBootstrapper静态类。

C# 4.0 改进我的NinjectBootstrapper静态类。,c#-4.0,design-patterns,static,singleton,ninject,C# 4.0,Design Patterns,Static,Singleton,Ninject,在服务项目(负责获取产品)中创建了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

在服务项目(负责获取产品)中创建了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>();
     }

  }

}
公共静态类引导程序
{
私有静态只读对象_thislock=新对象();
//防止多次执行引导的标志
私有静态布尔完成;
公共静态无效引导()
{
锁(这个锁)
{
如果(_done)
{
返回;
}
_完成=正确;
//服务
NinjectContainer.Kernel.Bind().To();
//存储库
NinjectContainer.Kernel.Bind().To();
}
}
}
现在,虽然这样做有效,但我真的很想知道是否有更好的方法来重构我的代码。例如,我读过很多关于使用单例而不是静态类的内容。 我想在这里建立一个良好的基础,使未来的开发人员能够轻松灵活地扩展功能。我可以考虑哪些好的建议和技巧

我读过很多关于使用单例而不是静态类的东西

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

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

我读过很多关于使用单例而不是静态类的东西

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


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

谢谢您的解释。的确,这确实是在启动时使用的。谢谢你的解释。我将保留我的代码。啊,谢谢你的解释。的确,这确实是在启动时使用的。谢谢你的解释。我会让我的代码保持原样。