我使用存储库模式使用Ninject配置了MVC 3解决方案.我的一些绑定包括:
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InRequestScope();
kernel.Bind<IMyService>().To<MyService>().InRequestScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我还在我的解决方案中添加了一个控制台应用程序,我希望利用相同的存储库和服务.我的控制台应用程序的Ninject配置如下所示:
kernel.Bind<IDatabaseFactory>().To<DatabaseFactory>().InSingletonScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
kernel.Bind<IMyRepository>().To<MyRepository>().InSingletonScope();
kernel.Bind<IMyService>().To<MyService>().InSingletonScope();
kernel.Bind<ILogging>().To<Logging>().InSingletonScope();
Run Code Online (Sandbox Code Playgroud)
我的控制台代码如下:
static void Main(string[] args)
{
IKernel kernel = new StandardKernel(new IoCMapper());
var service = kernel.Get<IMyService>();
var logger = kernel.Get<ILogging>();
... do some processing here
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想确保我正在为控制台应用程序正确配置Ninject.在我的控制台应用程序中对我的所有绑定使用InSingletonScope()是否正确?我应该以不同的方式配置它吗?
Sco*_*nce 11
您是否希望整个应用程序中每个存储库服务只有一个实例?如果是这样,那么使用InSingletonScope.
您的控制台应用程序是多线程的吗?如果是这种情况,并且您希望每个线程都有一个新的服务实例,那么您将使用InThreadScope.
如果您希望每次调用服务的新实例,请将其设置为InTransientScope.
您还可以选择使用InScope定义自己的范围.Bob Cravens在这里给出了很好的概述http://blog.bobcravens.com/2010/03/ninject-life-cycle-management-or-scoping/
| 归档时间: |
|
| 查看次数: |
9520 次 |
| 最近记录: |