改进我的 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.
一个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.