Мне тоже нужно добавить Службу в мое 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, если это возможно, скажите мне другой способ ввести мою службу