我目前正在测试一些IoC框架的一个项目,我很想能够使用Ninject 3。
我运行到那里后,我配置绑定到具体类型的单一个问题,我似乎无法有效地解除绑定的服务类型以后。 也就是说, StandardKernel.TryGet<T>()
返回调用之后的非空值StandardKernel.Unbind<T>()
请参阅下面我详细的用法片段。
这是Ninject 3中的错误,或者是有什么我失踪?
作为一种变通方法,我可以简单地重新绑定的具体类型,以恒定的空值。 但我更愿意理解如果我不所著的Grokking东西之前,我退回到那个位置。
顺便说一句,如果我指定绑定到单范围内的具体类型的接口拆散的作品如预期,但不适合在单身范围自势必具体类型。 如果这是不是一个错误(和额外的业力),你能解释一下为什么会出现行为上的差异?
public class MyServiceType : IDisposable
{
public bool IsDisposed { get; private set; }
public void Dispose()
{
IsDisposed = true;
}
}
static void Main(string[] args)
{
var kernel = new StandardKernel();
kernel.Bind<MyServiceType>().ToSelf().InSingletonScope();
var instance = kernel.TryGet<MyServiceType>();
Debug.Assert(instance != null && !instance.IsDisposed);
// release the instance
kernel.Release(instance);
Debug.Assert(instance.IsDisposed);
instance = null;
// unbind the service
kernel.Unbind<MyServiceType>();
// uncomment below for workaround
// kernel.Rebind<MyServiceType>().ToConstant((MyServiceType)null);
// after unbinding should no longer be able to get an instance of the service
instance = kernel.TryGet<MyServiceType>();
Debug.Assert(instance == null); // <---- this is failing!
}