Внедрение зависимостей ASP. Net Ядро в приложении WPF - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть ASP. NET Core 2.0 проект с большим количеством внедрения зависимостей.

Я также работаю над приложением WPF (. NET Framework 4.8), и я бы хотел нравится использовать сервис, реализованный в проекте ASP. NET. Возможно ли это сделать в несколько строк кода? И как я могу это использовать? Этот сервис требует много других сервисов, и каждый из сервисов будет создаваться долго.

Спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

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

var services = new ServiceCollection();

// add your services
services.AddSingleton<MyService>();
services.AddTransient<Dependency1>();
services.AddTransient<Dependency2>();

// build service provider
var serviceProvider = services.BuildServiceProvider();

// resolve the service from the service provider
var service = serviceProvider.GetService<MyService>();

В идеале настройку поставщика услуг можно выполнить только один раз. в очень раннем и центральном месте вашего приложения. Например, WPF App.xaml.cs или что-то еще и статически храните его, чтобы другие компоненты могли обращаться к поставщику услуг для разрешения этой и других услуг.

Для регистрации ваших служб и их зависимостей вы также можете следовать общему шаблону: создание повторно используемых методов расширения, которые регистрируют набор связанных служб. Например, вы можете сделать это, а затем использовать этот метод как в ASP. NET Core, так и в вашем приложении WPF:

public IServiceCollection AddMyServices(this IServiceCollection services)
{
    services.AddSingleton<MyService>();
    services.AddTransient<Dependency1>();
    services.AddTransient<Dependency2>();

    return services;
}

Затем вы можете просто позвонить services.AddMyServices(), чтобы добавить все эти службы в ваша коллекция сервисов.

При этом использование внедрения зависимостей в WPF - это то, что уже охватывалось рядом сред. Обычно они не будут использовать контейнер для ввода зависимостей из ASP. NET Core (просто потому, что эти фреймворки обычно предшествуют ASP. NET Core), но имеют аналогичные с аналогичными функциями. Эти инфраструктуры WPF также часто поставляются с хорошей настройкой для MVVM и множеством специальных c помощников, связанных с WPF. Примером каркаса (без какой-либо рекомендации с моей стороны) будет Caliburn.Micro , MVVM Light или Prism .

...