我正在尝试将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()
为每个请求提供相同的实例,但这不会发生。
答案 0 :(得分:1)
我现在遇到了完全相同的问题。我安装了Ninject
和Ninject.Web.Common
个软件包,并且使用自定义NinjectControllerFactory
注入了依赖项。使用 BatteryBackupUnit&#39> 在评论中链接的 Erik的响应,我决定卸载我的Ninject软件包并安装 Ninject.MVC5 < / strong>包。
该包在NinjectWebCommon.cs
文件夹中生成了App_Start
Ninject配置文件。您唯一需要做的就是将绑定复制到RegisterServices
文件中的NinjectWebCommon.cs
方法,然后停止使用自定义NinjectControllerFactory(如果有的话)。
它解决了我的问题,希望它也解决了你的问题。