如何使用Ninject在ASP.NET MVC 5中共享同一个实例?

时间:2014-08-21 00:25:02

标签: asp.net-mvc asp.net-mvc-5 ninject

我正在尝试将Ninject用于ASP.NET MVC 5的IoC。

我的控制器有一个像这样的构造函数:

private readonly IUnitOfWork _unit;
private readonly IContactService contactService;

public ContactsController(IUnitOfWork unit, IContactService contactService)
{
    this._unit = unit;
    this._contactService = contactService;
}

因此ContactService有一个构造函数(IUnitOfWork单元)并且应该共享IUnitOfWork的相同实例,但是Ninject正在给出一个新的不同实例。 My ContactService使用以下构造函数派生一个类:

public ServiceBase(IUnitOfWork unit)
{
    _unit = unit;
    _repository = _unit.GetRepository<TEntity>();
}

我的ninject配置绑定:

public static void RegisterServices(IKernel kernel)
{

    kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
    kernel.Bind<IContactService>().To<ContactService>().InRequestScope();;

}

我希望InRequestScope()为每个请求提供相同的实例,但这不会发生。

1 个答案:

答案 0 :(得分:1)

我现在遇到了完全相同的问题。我安装了NinjectNinject.Web.Common个软件包,并且使用自定义NinjectControllerFactory注入了依赖项。使用 BatteryBackupUnit&#39> 在评论中链接的 Erik的响应,我决定卸载我的Ninject软件包并安装 Ninject.MVC5 < / strong>包。

该包在NinjectWebCommon.cs文件夹中生成了App_Start Ninject配置文件。您唯一需要做的就是将绑定复制到RegisterServices文件中的NinjectWebCommon.cs方法,然后停止使用自定义NinjectControllerFactory(如果有的话)。

它解决了我的问题,希望它也解决了你的问题。