ASP. NET MVC Ошибка внедрения зависимости: невозможно получить доступ к удаленному объекту - PullRequest
0 голосов
/ 18 апреля 2020

Мне тоже нужно добавить Службу в мое Asp. net веб-приложение MVC5. Я использую библиотеку Microsoft.Extensions.DependencyInjection, и я использую ApplicationDbContext по умолчанию, она работает, пока у меня нет только одного запроса от контроллера, в противном случае я получаю это Ошибка: System.ObjectDisposedException: 'Невозможно получить доступ к удаленному объекту.

мой код: Startup.cs:

 var services = new ServiceCollection();
        service.AddMyService(); // I need to inject this library
        services.AddScoped<HomeController>();
        services.AddScoped<RenderController>();
        // Build the container while ensuring scopes are validated
        ServiceProvider container = services.BuildServiceProvider(true);

        // Replace default controller factory
        ControllerBuilder.Current.SetControllerFactory(
            new MsDiControllerFactory(container));

        ConfigureAuth(app);

MsDiControllerFactory.cs

public class MsDiControllerFactory : DefaultControllerFactory
{
    private readonly ServiceProvider container;

    public MsDiControllerFactory(ServiceProvider container) => this.container = container;

    protected override IController GetControllerInstance(RequestContext c, Type type) =>
        (IController)this.GetScope().ServiceProvider.GetRequiredService(type);

    public override void ReleaseController(IController c) => this.GetScope().Dispose();

    private IServiceScope GetScope() =>
       (IServiceScope)HttpContext.Current.Items["scope"] ??
          (IServiceScope)(HttpContext.Current.Items["scope"] = this.container.CreateScope());
}

некоторый код мое использование:

private ApplicationDbContext _db = new ApplicationDbContext();
 public ActionResult RenderMobileMenu()
    {
        var productGrp = _db.ProductGroups.AsNoTracking().Where(p => !p.IsDeleted).ToList();

        return PartialView("_PartialMobileMenu", productGrp);
    }
 public ActionResult RenderMenu()
    {
        var productGrp = _db.ProductGroups.AsNoTracking().Where(p => !p.IsDeleted).ToList();

        return PartialView("_PartialMenu", productGrp);
    }

в моем _Layout.cs html:

@{ Html.RenderAction("RenderMenu", "Render", new { Area = "" }); }
@{ Html.RenderAction("RenderMobileMenu", "Render", new { Area = "" }); }

Я пробовал AoutoFa c, но после использования этого входа в систему и регистрации не работал. пожалуйста, помогите мне, как решить эту проблему, oR, если это возможно, скажите мне другой способ ввести мою службу

...