Контроллер зарегистрирован как временный, но реализует IDisposable - PullRequest
0 голосов
/ 26 апреля 2018
var container = new Container();

container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

container.RegisterInstance<IDbConnection>(new SqlConnection(connectionString));

container.Register<IAdvertRepository, AdvertRepository>(Lifestyle.Scoped);

container.Register<IAdvertService, AdvertService>(Lifestyle.Scoped);
container.Register<ICommentService, CommentService>(Lifestyle.Scoped);
container.Register<IRoleService, RoleService>(Lifestyle.Scoped);
container.Register<IUserService, UserService>(Lifestyle.Scoped);

container.RegisterWebApiControllers(GlobalConfiguration.Configuration);

container.Verify();
GlobalConfiguration.Configuration.DependencyResolver =
    new SimpleInjectorWebApiDependencyResolver(container);

Я использую Simple Injector в Web API и пытаюсь работать с ним, но получаю ошибку:

AdvertController зарегистрирован как временный, но реализует IDisposable

Другие контроллеры имеют такие же ошибки.

Как мне это исправить?

public class AdvertController : ApiController
{
    private readonly IAdvertService _advertService;

    public AdvertController(IAdvertService advertService)
    {
        _advertService = advertService;
    }

    [HttpGet]
    public IEnumerable<AdvertDto> GetAll()
    {
        return _advertService.GetAll();
    }

    [HttpGet]
    public AdvertDto Get(long id)
    {
        return _advertService.Get(id);
    }

    [HttpDelete]
    public void Delete(long id)
    {
        _advertService.Delete(id);
    }
}

1 Ответ

0 голосов
/ 15 июня 2018

Для всех, кто заходит на эту страницу, в нашем случае SimpleInjector был автоматически обновлен с 3.1.1 до 4.3.0, потому что другой пакет зависел от более новой версии, что сломало наше приложение MVC5 с

XXXController зарегистрирован как временный, но реализует IDisposable

После некоторых исследований я понял, что хотя SimpleInjector был обновлен, ни один из других связанных пакетов ( SimpleInjector.Integration.Web , SimpleInjector.Integration.Web.Mvc и т. Д.). Я обновил их, а также должен был изменить все экземпляры

container.RegisterPerWebRequest<T>(...)

до

container.Register<T>(..., Lifestyle.Scoped)

После этого все снова заработало.

P.S. Если вы заметили, что другой пакет не должен зависеть от SimpleInjector, вы абсолютно правы. Это был пакет внутреннего производства, в который как-то случайно была добавлена ​​зависимость. Мы удалили его, но подумали, что было бы неплохо получить последнюю версию пакета SI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...