Ninject Singleton Scope内部控制台应用程序

时间:2013-08-18 02:04:31

标签: c# singleton ninject console-application

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

static void Main(string[] args)
{
    IKernel kernel = new StandardKernel();

    kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>()
        .InSingletonScope();

2 个答案:

答案 0 :(得分:3)

这取决于您的控制台应用是否是多线程的。如果是这样,您应该使用InThreadScope,这样IDisposable对象将被放置在线程的末尾。如果没有,您可以继续InSingletonScope在单线程应用中使用InThreadScope没有任何区别。

如果您对范围界定有一些额外需求,可以尝试custom scope InScope。或者你可以尝试ninject named scope extensions

类似的问题:Configuring Ninject for a console application and leveraging the existing repository for my MVC application

答案 1 :(得分:0)

这都是关于'请求'的。每个应用程序处理请求,每个请求都应该有自己的范围。如果你的控制台应用程序只处理一个请求(它处理命令行参数,执行一些业务逻辑和死亡),单例范围就可以了。如果您的应用程序存在很长时间并处理许多请求(因为可能建议使用作业),那么最好将每个作业(或可选的一组作业)视为一个请求。

在Web应用程序中,请求通常是Web请求,范围通常是一个HTTP请求。对于WCF服务,请求是一个WCF操作,范围围绕该操作。对于Windows服务,不存在HTTP或WCF操作,并且通常使用称为“生命周期范围”的东西(显式开始和结束的生命周期)。

我不知道Ninject的确切术语是什么,但你可能需要像终身范围这样的东西。