C# 控制台应用程序内部的Ninject单例作用域

C# 控制台应用程序内部的Ninject单例作用域,c#,singleton,ninject,console-application,C#,Singleton,Ninject,Console Application,在控制台应用程序中对数据库上下文使用InSingletonScope()有什么问题吗?我正在运行一个循环,并为每个项目运行一个作业。另一个范围会更好吗?如果在web应用程序中使用Ninject,我通常使用RequestScope static void Main(字符串[]args) { IKernel kernel=新的标准内核(); kernel.Bind()到() .InSingletonScope(); 这取决于你的控制台应用程序是否是多线程的。如果是这样,你应该使用InThreadSc

在控制台应用程序中对数据库上下文使用
InSingletonScope()
有什么问题吗?我正在运行一个循环,并为每个项目运行一个作业。另一个范围会更好吗?如果在web应用程序中使用Ninject,我通常使用RequestScope

static void Main(字符串[]args)
{
IKernel kernel=新的标准内核();
kernel.Bind()到()
.InSingletonScope();

这取决于你的控制台应用程序是否是多线程的。如果是这样,你应该使用
InThreadScope
,这样
IDisposable
对象将在线程结束时被处理。如果不是这样,你可以继续使用
InSingletonScope
在单线程应用程序中使用
InThreadScope
,这不会有什么区别

如果您对范围界定有额外要求,可以尝试
InScope
。也可以尝试


这里有一个类似的问题:

这都是关于“请求”的。每个应用程序处理请求,每个请求都应该有自己的作用域。如果控制台应用程序只处理一个请求(它处理命令行参数,执行一些业务逻辑并终止)单例作用域是可以的。如果您的应用程序存在很长时间并处理许多请求(正如作业的使用可能暗示的那样),那么最好将每个作业(或可选的一组作业)视为一个请求

在web应用程序中,请求通常是web请求,作用域通常围绕一个HTTP请求。对于WCF服务,请求是一个WCF操作,作用域围绕该操作。对于Windows服务,没有HTTP或WCF操作,通常使用称为“终生作用域”的内容(明确开始和结束的生命周期)


我不知道Ninject的确切术语是什么,但您可能需要像终生作用域这样的东西。

这是可行的,但在使用它之后,我注意到它将我的数据库置于挂起状态,因为我的databasefactory上的单例正在挂起数据库。