C # Передача объектов в ApiController на хосте Owin - PullRequest
0 голосов
/ 15 октября 2018

У меня есть служба Windows, которая делает некоторые вещи на тиках таймера.Теперь мне нужно добавить конечную точку API для этой службы, чтобы выполнять почти те же функции, но по требованию.В моем сервисе у меня есть два экземпляра вспомогательных классов:

LithiumUtility lu;
MarketoUtility mu;

Для размещения моей конечной точки я использую пакет Microsoft.AspNet.WebApi.OwinSelfHost.Я начинаю это с IDisposable _server = WebApp.Start<Startup>(url: baseAddress);, как видно во всех уроках.Класс запуска также не является чем-то особенным.

Моя конечная точка определена в следующем классе:

public class MarketoController : ApiController{}

Итак, есть ли способ передать мои mu и lu в MarketoController.Я думаю, что это должно быть сделано через конструктор, но MarketoController явно нигде не упоминается, и я не уверен, как он вообще создан.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

После долгих поисков я не смог найти ответ на вопрос «Как я могу использовать конкретный экземпляр некоторого класса».По крайней мере без установки 10 дополнительных пакетов и написания 100 строк кода.

Итак, я выбрал этот грязный подход:

Я создал этот класс:

   struct UtilityClasses
{
    public class1 c1 { get; set; }
    public class2 c2 { get; set; }

    public static UtilityClasses uc { get; set; }
    public UtilityClasses(class1 c1, class2 c2)
    {
        this.c1 = c1;
        this.c2 = c2;
    }
}

Рядом слиния, которая запускает сервер IDisposable _server = WebApp.Start<Startup>(url: baseAddress), я звоню

        UtilityClasses uc = new UtilityClasses(c1, c2);
        UtilityClasses.uc = uc;

, а с моего контроллера я звоню

    private class1 c1;
    private class2 c2;


    public MarketoController()
    {
        c1 = UtilityClasses.uc.c1;
        c2 = UtilityClasses.uc.c2;
    }

Судя по всему, что я прочитал, это не очень хорошая идея,но это решает мою проблему.

0 голосов
/ 15 октября 2018

Это достигается с помощью внедрения зависимости asp.net

Резюме: вызов services.AddScoped<LithiumUtility> в Startup.ConfigureServices подключает конвейер asp.net, чтобы понять, как создавать экземпляры конструкторазависимостей, поэтому вы правы в том, что конструктор контроллера является правильным местом для определения этих зависимостей.,

...