處置注射比如我有我的解決方案配置Ninject下面的代碼塊:處置或不使用Ninject
public class NinjectDependencyScope : IDependencyScope
{
private IResolutionRoot resolver;
internal NinjectDependencyScope(IResolutionRoot resolver)
{
Contract.Assert(resolver != null);
this.resolver = resolver;
}
public object GetService(Type serviceType)
{
if (resolver == null)
{
throw new ObjectDisposedException("this", "This scope has already been disposed");
}
return resolver.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
if (resolver == null)
{
throw new ObjectDisposedException("this", "This scope has already been disposed");
}
return resolver.GetAll(serviceType);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
IDisposable disposable = resolver as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
resolver = null;
}
}
我的看法是,這裏使用的一次性模式,時並不需要..
IDependencyScope是IDisposable,但我應該只清理IDisposable成員,如果我正在構建它們,但注入的解析器在構造函數中並不是由我的類擁有(創建),並且IResolutionRoot不會從/實現IDisposable中派生/執行...
是我在這裏?
(檢查this文章關於IDisposable模式供參考)
(編輯): 這其實是一個基類,通過下面的類使用的,所以在這裏卸下了IDisposable的實現不能做..
public class NinjectDependencyResolver : NinjectDependencyScope, IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver(IKernel kernel)
: base(kernel)
{
this.kernel = kernel;
}
public IDependencyScope BeginScope()
{
return new NinjectDependencyScope(kernel.BeginBlock());
}
}