Узнайте, как использовать внедрение зависимостей в .NET MAUI

Как вы знаете, .NET MAUI эволюционировал из Xamarin.Forms с более удобными возможностями для разработчиков и более высокой производительностью. Подобно добавлению драгоценного камня к короне, .NET MAUI позволяет использовать внедрение зависимостей намного проще, чем Xamarin.Forms.

В этом блоге мы увидим, как легко использовать внедрение зависимостей в приложении .NET MAUI.

Что такое внедрение зависимостей?

Внедрение зависимостей — это просто способ, которым объект (клиент) получает другие объекты (сервисы), от которых он зависит. Здесь инжектор означает метод или код, который передает объект службы объекту клиента. Внедрение зависимостей — это вариант паттерна инверсия управления. Здесь класс обслуживания будет внедрять зависимости в объект во время выполнения.

Преимущества

Основное преимущество внедрения зависимостей заключается в том, что оно уменьшает связь между классами и их зависимостями.

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

Это делает доступ к службе и клиентским объектам более гибким.

Использование внедрения зависимостей в приложении .NET MAUI

У меня есть приложение .NET MAUI с MainPage, содержащим Label и ViewModel со свойством LabelText. См. следующий пример кода.

MainPage.xaml

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="DependencyInjectionInMAUI.MainPage"><Label VerticalTextAlignment="Center" HorizontalTextAlignment="Center" Text="{Binding LabelText}"/>
</ContentPage>

ViewModel.cs

namespace DependencyInjectionInMAUI
{
public class ViewModel
{
public string LabelText { get; set; } = "Hello World";
}
}

Давайте свяжем свойство LabelText с текстом Label, используя внедрение зависимостей, выполнив следующие действия:

Шаг 1. Откройте файл MauiProgram.cs. Затем добавьте в него ссылку Microsoft.Extensions.DependencyInjection, чтобы получить доступ к методам расширения службы.

MauiProgram.cs

using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Hosting;
using Microsoft.Extensions.DependencyInjection;namespace DependencyInjectionInMAUI
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});return builder.Build();
}
}
}

Шаг 2. Затем добавьте одноэлементную службу внедрения зависимостей для моделей MainPage и View.

MauiProgram.cs

using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using Microsoft.Maui.Controls.Compatibility;
using Microsoft.Maui.Controls.Hosting;
using Microsoft.Extensions.DependencyInjection;namespace DependencyInjectionInMAUI
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});builder.Services.AddSingleton<MainPage>();builder.Services.AddSingleton<ViewModel>();
return builder.Build();
}
}
}

Шаг 3. После успешного добавления необходимых служб, как указано на шаге 2, вы можете получить прямой доступ к этим объектам в желаемых конструкторах классов. Поэтому обращайтесь к объектам службы MainPage и ViewModel в файлах App.xaml.cs и MainPage.xaml.cs соответственно, добавляя аргументы в конструкторы этих классов.

Appxaml.cs

namespace DependencyInjectionInMAUI
{
public partial class App : Application
{
public App(MainPage mainPage)
{
InitializeComponent();MainPage = new MainPage();
}
}
}

MainPage.xaml.cs

namespace DependencyInjectionInMAUI
{
public partial class MainPage : ContentPage
{
public MainPage( ViewModel viewModel)
{
InitializeComponent();
}}
}

Шаг 4. Теперь получите объекты службы из аргумента конструктора и назначьте их объектам клиента, как показано в следующем коде.

Appxaml.cs

namespace DependencyInjectionInMAUI
{
public partial class App : Application
{
public App(MainPage mainPage)
{
InitializeComponent();MainPage = mainPage;
}
}
}

MainPage.xaml.cs

namespace DependencyInjectionInMAUI
{
public partial class MainPage : ContentPage
{
public MainPage( ViewModel viewModel)
{
InitializeComponent();this.BindingContext = viewModel;
}}
}

Вот и все. Теперь запустите программу и посмотрите на результат.

Ссылка на GitHub

Дополнительные сведения см. в полном примере внедрения зависимостей в приложении .NET MAUI на сайте GitHub.

Заключение

Спасибо за прочтение! Мы надеемся, что вы узнали, как легко работать с приложением .NET MAUI с помощью техники внедрения зависимостей. Это делает наш код легко повторно используемым, тестируемым и ремонтопригодным. Вы также можете использовать внедрение зависимостей в приложениях .NET MAUI, которые содержат элементы управления Syncfusion .NET MAUI. Каждый квартал мы доставляем больше элементов управления .NET MAUI для замены существующих элементов управления Xamarin.Forms, чтобы вы могли использовать их после перехода на проекты .NET MAUI.

Если у вас есть какие-либо отзывы, особые требования или элементы управления, которые вы хотели бы видеть в нашем пакете .NET MAUI, укажите их в разделе комментариев ниже.

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

Связанные блоги

Первоначально опубликовано на https://www.syncfusion.com 22 декабря 2021 г.