Как я могу использовать Замок Виндзор 4.1.1. обеспечить зависимость в моем проекте ASP.NET Core MVC для моего контроллера? - PullRequest
0 голосов
/ 20 января 2019

Я создал проект ASP.NET MVC Visual Studio 2017 с использованием Framework .NET Core 2.1. Я новичок в Visual Studio 2017, как импортировать ссылки и внедрение зависимостей Castle Windsor, поэтому мои проблемы могут быть довольно простыми. Моя конечная цель - использовать инъекцию зависимостей Castle Windsor, чтобы указать мой контроллер, связанный с классом Entity Framework. У меня есть функциональный код без Castle Windsor, но я пытаюсь изучить и специально использовать здесь Castle Windsor.

Я просмотрел несколько статей для Castle Windsor, например: https://www.c -sharpcorner.com / блог / как к орудию-замок-Виндзор-зависимость инъекции-в-MVC . Однако этот пример использует MVC4. В настоящее время у меня есть пользовательский DbContext для предоставления доступа к моим тестовым объектам.

Моя веб-страница уже может разрешить контроллер, который, как мне кажется, мой оператор MapRoute, который был создан автоматически при создании класса моего контроллера.

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=TestEntities}/{action=Index}/{id?}");
});

Как я могу включить инъекцию Castle Windsor Dependency в этот сценарий? Нужно ли мне изменить определение маршрута?

Согласно учебному пособию https://github.com/castleproject/Windsor/blob/master/docs/mvc-tutorial-part-2-plugging-windsor-in.md

Я пытался создать WindsorControllerFactory, чтобы предположительно разрешить мой контроллер.

public class WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IKernel kernel;

    public WindsorControllerFactory(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public override void ReleaseController(IController controller)
    {
        kernel.ReleaseComponent(controller);
    }

    protected override IController GetControllerInstance(
        RequestContext requestContext, Type controllerType)
    {
        if (controllerType == null)
        {
            throw new HttpException(404, string.Format(
                "The controller for path '{0}' could not be found.",
                requestContext.HttpContext.Request.Path));
        }
        return (IController)kernel.Resolve(controllerType);
    }
}

В VS2017 я, похоже, не смог использовать пространство имен System.Web.Routing в своем проекте, даже когда я добавил версию .NET Framework 4.0 в качестве ссылки на сборку. Это означает, что я не могу разрешить класс RequestContext. Я выбрал неправильный путь здесь? Я не вижу, где отсутствующее пространство имен Routing является проблемой для других.

Буду признателен за любые входные данные или за хорошие ссылки для этого сценария.

...