Это работает довольно хорошо — я могу заменить встроенный 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.
Код: Выделить всё
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)
{
/* ... */
}
}
Подробнее здесь: https://stackoverflow.com/questions/330 ... p-net-core