3

Я кодирую интернет-приложение MVC 5 с веб-сервисом web api 2. Нужен ли мне метод dispose для класса DbContext в веб-службе? Это не так, как по умолчанию.Утилизировать метод в веб-сервисе web api 2

+0

Что вы будете делать, если вам нужен такой метод? Вы планировали переписать класс DbContext? –

+0

Привет, проверьте это http://stackoverflow.com/questions/20836837/why-does-no-one-dispose-dbcontext-after-webapi-controller-operation. Это может быть полезно для вас. –

+0

@JohnSaunders: у моего класса DbContext уже есть метод dispose, мне интересно, нужно ли мне добавить метод dispose к веб-контроллеру api. – user3736648

ответ

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/

 Смежные вопросы

  • Нет связанных вопросов^_^