У меня есть следующие реализации IDependencyScope
:Что такое правильный способ Утилизировать управляемые ресурсы в IDependencyScope
public class NinjectScope : IDependencyScope
{
protected IResolutionRoot resolutionRoot;
public NinjectScope(IResolutionRoot kernel)
{
resolutionRoot = kernel;
}
public object GetService(Type serviceType)
{
IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
return resolutionRoot.Resolve(request).SingleOrDefault();
}
public IEnumerable<object> GetServices(Type serviceType)
{
IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
return resolutionRoot.Resolve(request).ToList();
}
~NinjectScope()
{
this.Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
IDisposable disposable = (IDisposable)this.resolutionRoot;
if (disposing)
{
// Free managed resources
if (this.resolutionRoot != null)
{
disposable.Dispose();
this.resolutionRoot = null;
}
}
}
}
Как вы можете видеть это Dispose(bool disposing)
реализовано.
Я столкнулся с ошибкой Error loading Ninject component ICache
, когда я добавил фабрику Ninject в один из моих классов WebAPI.
As per this answer/question Я понял, что использовал ту же реализацию, за исключением того, что я не удалял мое ядро, это было вызвано внедрением метода Dispose(bool disposing)
.
Когда я удалил реализацию, зависимости в моем контроллере WebAPI перестали вызывать ошибку, поэтому кажется, что проблема с внедрением метода Dispose(bool disposing)
.
Какова правильная реализация Dispose()
для данного класса?
Позвонив следующее, чтобы создать элемент, который я называю выбрасывайте на:
IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true);
I learned from this answer,, что только объект, который создан одноразовый ресурс должен позвонить распоряжаться, поэтому, возможно, нет никаких вещей, в пределах мой класс, который нуждается в утилизации
Извините, вы совершенно правы ... это тот объект, который удаляется и проходит. Естественно, что это действительно неправильно распоряжаться этим. спасибо – Luke