1

我得到了IUnitOfWork接口(我不会向你展示它的实现):

public interface IUnitOfWork : IDisposable
{
    ...
}

注意IDisposable继承。此外,我得到了具有适当实现的服务:

public interface IBusinessLogicService
{
    ...
}

public sealed class BusinessLogicService : IBusinessLogicService
{
    // Dependency is auto-injected by ninject
    // because of the custom injection heuristic.
    public IUnitOfWork UnitOfWork { get; set; }

    ...
}

我们去ninject绑定:

kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
kernel.Bind<IBusinessLogicService>().To<BusinessLogicService>();

如您所见,ninject 将IUnitOfWork在请求结束时自动停用实例并释放它。

现在,问题是,
ninject 是否还会停用(并在下一个 Web 请求时重新激活)依赖于停用对象的实例(如IBusinessLogicService) ?

4

2 回答 2

1

不,如果有范围,Ninject 将在收集范围时停用对象。瞬态对象不被 Ninject 跟踪,并且被认为是在外部管理的[并且在需要的地方创建新的实例]。

一个作用域的对象的停用点通常由作用域对象何时被垃圾回收决定

因为InRequestScope在使用 ASP.NET 管道挂钩的请求结束时,确定性地会发生停用。

另请参阅Ninject.Extensions.NamedScope此空间中的更多选项

于 2013-02-01T08:52:51.353 回答
0

Ninject 只负责依赖注入。它将根据内核绑定使用类实例实例化接口变量。它不负责停用使用 Ninject 创建的实例。对象的停用将遵循正常的 asp.net 框架的对象销毁周期。

于 2013-02-01T09:01:16.273 回答