Я кодирую интернет-приложение MVC 5 с веб-сервисом web api 2. Нужен ли мне метод dispose для класса DbContext в веб-службе? Это не так, как по умолчанию.Утилизировать метод в веб-сервисе web api 2
3
A
ответ
12
На самом деле, System.Web.Http.ApiController
уже реализует IDisposable
:
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
// ...
public abstract class ApiController : IHttpController, IDisposable
{
// ...
#region IDisposable
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
}
#endregion IDisposable
}
Так что, если ваш контроллер имеет DbContext, выполните следующие действия:
public class ValuesController : ApiController
{
private Model1Container _model1 = new Model1Container();
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (_model1 != null)
{
_model1.Dispose();
}
}
base.Dispose(disposing);
}
}
0
В Web Api 2, вы можете зарегистрировать компонент для удаления когда запрос выходит за рамки. Этот метод называется «RegisterForDispose», и он является частью запроса. Устанавливаемый компонент должен реализовывать IDisposable.
Лучший подход создать свой собственный метод расширения, как показано ниже ...
public static T RegisterForDispose<T>(this T toDispose, HttpRequestMessage request) where T : IDisposable
{
request.RegisterForDispose(toDispose); //register object for disposal when request is complete
return toDispose; //return the object
}
Теперь (в контроллере апи) вы можете зарегистрировать объекты, которые вы хотите избавиться, когда запрос завершения ...
var myContext = new myDbContext().RegisterForDispose(Request);
Ссылки ... https://www.strathweb.com/2015/08/disposing-resources-at-the-end-of-web-api-request/
Что вы будете делать, если вам нужен такой метод? Вы планировали переписать класс DbContext? –
Привет, проверьте это http://stackoverflow.com/questions/20836837/why-does-no-one-dispose-dbcontext-after-webapi-controller-operation. Это может быть полезно для вас. –
@JohnSaunders: у моего класса DbContext уже есть метод dispose, мне интересно, нужно ли мне добавить метод dispose к веб-контроллеру api. – user3736648