Замените активатор промежуточного программного обеспечения в ASP.NET Core.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Замените активатор промежуточного программного обеспечения в ASP.NET Core.

Сообщение Anonymous »

Я пытаюсь указать моему приложению ASP.NET Core MVC использовать сторонний DI-контейнер. Вместо того, чтобы писать адаптер, я пытаюсь просто подключить библиотеку, следуя советам в этом посте.

Это работает довольно хорошо — я могу заменить встроенный IControllerActivator code> с моим собственным, использующим контейнер DI. Однако я сталкиваюсь с препятствием при попытке создать экземпляр специального промежуточного программного обеспечения, которое также использует внедренные зависимости. ASP.NET не может разрешить эти зависимости, поскольку он не использует мой сторонний DI-контейнер. Существует ли эквивалент IControllerActivator для промежуточного программного обеспечения, или я застрял в использовании встроенного DI или написании адаптера?

** РЕДАКТИРОВАТЬ **

Вот еще немного моего кода. На самом деле я пытаюсь использовать Ninject, используя приведенный выше шаблон.

Код: Выделить всё

internal sealed class NinjectControllerActivator : IControllerActivator
{
private readonly IKernel _kernel;

public NinjectControllerActivator(IKernel kernel)
{
_kernel = kernel;
}

[DebuggerStepThrough]
public object Create(ActionContext context, Type controllerType)
{
return _kernel.Get(controllerType);
}
}
Я обнаружил у себя две проблемы:
  • Я не могу внедрить стандартные компоненты ASP.NET в свои контроллеры, поскольку Ninject не знает о них.
  • Мое промежуточное программное обеспечение, использующее службы приложений, не может быть создано, поскольку ASP.NET не поддерживается. не знаю о Ninject.
В качестве примера первой проблемы приведем контроллер, экземпляр которого не удается создать, поскольку я использую IUrlHelper. (также обратите внимание на ILogger, который также не может создать экземпляр):

Код: Выделить всё

public class SystemController : Controller
{
public SystemController(ILogger logger, IUrlHelper urlHelper)
{
/*...*/
}
}
Вот пример второй проблемы с пользовательским промежуточным программным обеспечением:

Код: Выделить всё

public class CustomMiddleware
{
private RequestDelegate _next;
// this is an application specific service registered via my Ninject kernel
private IPersonService _personService;

public CustomMiddleware(RequestDelegate next, IPersonService personService)
{
_next = next;
_personService = personService;
}

public async Task Invoke(HttpContext context)
{
/* ... */
}
}
Я понимаю, что теоретически компоненты ASP.NET должны находиться в отдельном конвейере, а компоненты моего приложения — в другом, но на практике мне часто приходится использовать компоненты в сквозной путь (как в примерах выше).

Подробнее здесь: https://stackoverflow.com/questions/330 ... p-net-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»