×
=0) { let js = text.slice(pos1, pos2); + '<\/' + "script" + '>'; arrText.push(js); // next pos1 = pos2; continue; } } } break; } return arrText; } function OpenDialog(parentDiv, urlContent) { parentDiv = document.getElementById('modal-background'); // new !!!!!!! parentDiv.appendChild(document.getElementById('modal-template')); document.getElementById('modal-background').style.display = "block"; document.getElementById('modal-template').style.display = "flex"; // !!!!! document.getElementById('modal-body').innerHTML = ""; post_url(urlContent, "", function(text_from_server) { var element = document.getElementById('modal-body'); element.innerHTML = text_from_server; // add scripts var arrJSText = get_scripts(text_from_server); for (var i=0; i
dir.by
Поиск
Программирование, разработка, тестирование
→
WPF. Windows Presentation Foundation (отдельное приложение exe файл)
→
WPF приложение с Locator (MVVM шаблон проектирования)
→
Как добавить Dependency Injection, загрузку из appsettings.json в новом WPF приложении ?
Посмотрели
2106
раз(а)
Как добавить Dependency Injection, загрузку из appsettings.json в новом WPF приложении ?
последнее обновление: 14 мая 2024
1) нам нужно добавить NuGet-пакет
Microsoft.Extensions.Hosting
в проект.
2) Используя
HostBuilder
внутри файла
App.xaml.cs
в методе
ConfigureServices
регистриуем объекты которые будут использоваться как
Dependency Injection
.
3) В конструкторе класса если мы объявим параметр, то для этого параметра автоматически будет создаваться объект через
Dependency Injection
Шаг 1.
Создаем новое WPF приложение
Создаем
новый проект WPF Application...
и добавим
NuGet
-пакет
Microsoft.Extensions.Hosting
в проект
Шаг 2.
Создаю новый файл Services/ISampleService.cs
C#
Файл
Services/ISampleService.cs
namespace
WpfApp1.Services
{
public
interface
ISampleService
{
string
GetCurrentDate();
}
}
Шаг 3.
Создаю новый файл Services/SampleService.cs
C#
Файл
Services/SampleService.cs
using
System;
namespace
WpfApp1.Services
{
public
class
SampleService
: ISampleService
{
public
string
GetCurrentDate()
{
return
DateTime.Now.ToLongDateString();
}
}
}
Шаг 4.
Создаю новый файл Models/AppSettings.cs
C#
Файл
Models/AppSettings.cs
namespace
WpfApp1.Models
{
public
class
AppSettings
{
public
string
StringSetting { get; set; }
public
int
IntegerSetting { get; set; }
public
bool
BooleanSetting { get; set; }
}
}
Шаг 5.
Создаю новый файл appsettings.json
Со свойствами:
Build Action
=
Content
Copy to Output Directory
=
Always Copy
C#
Файл
appsettings.json
{
"AppSettings"
: {
"StringSetting"
:
"Hello!"
,
"IntegerSetting"
: 10,
"BooleanSetting"
: true
}
}
Шаг 6.
Добавим код в файл App.xaml.cs
C#
using
Microsoft.Extensions.Configuration;
using
Microsoft.Extensions.DependencyInjection;
using
Microsoft.Extensions.Hosting;
using
System;
using
System.Windows;
using
WpfApp1.Models;
using
WpfApp1.Services;
namespace
WpfApp1
{
public
partial
class
App
: Application
{
private
readonly IHost host;
public
App()
{
host = Host.CreateDefaultBuilder()
.ConfigureAppConfiguration((context, builder) =>
{
builder.AddJsonFile(
"appsettings.json"
, optional: true);
}).ConfigureServices((context, services) =>
{
ConfigureServices(context.Configuration, services);
})
.ConfigureLogging(logging =>
{
// Add other loggers...
})
.Build();
}
private
void
ConfigureServices(IConfiguration configuration, IServiceCollection services)
{
services.Configure<AppSettings>(configuration.GetSection(nameof(AppSettings)));
services.AddScoped<ISampleService, SampleService>();
services.AddSingleton<MainWindow>();
}
protected
override
async
void
OnStartup(StartupEventArgs e)
{
await host.StartAsync();
var mainWindow = host.Services.GetRequiredService<MainWindow>();
mainWindow.Show();
base.OnStartup(e);
}
protected
override
async
void
OnExit(ExitEventArgs e)
{
using
(host)
{
await host.StopAsync(TimeSpan.FromSeconds(5));
}
base.OnExit(e);
}
}
}
Шаг 7.
Добавим код в файл MainWindow.xaml.cs
C#
using
Microsoft.Extensions.Options;
using
System.Windows;
using
WpfApp1.Models;
using
WpfApp1.Services;
namespace
WpfApp1
{
public
partial
class
MainWindow
: Window
{
private
readonly ISampleService sampleService;
private
readonly AppSettings settings;
public
MainWindow(ISampleService sampleService, IOptions<AppSettings> settings)
{
InitializeComponent();
this
.sampleService = sampleService;
this
.settings = settings.Value;
}
}
}
Скачать пример
WpfApp1_DI.zip ...
размер: 120 kb
← Предыдущая тема
Создаем новое WPF приложение с Locator (разделение проекта на папки Views, ViewModels)
Следующая тема →
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)
Ваши Отзывы ... комментарии ...
Вашe имя
Ваш комментарий
(www ссылки может добавлять только залогиненный пользователь)
+ картинку
Объявления
Объявления
WPF простое новое приложение
•
Создаем новое WPF приложение | C#
WPF layout
•
Делаем layout с DockPanel и StackPanel в WPF
События
•
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на TextBlock"| координаты экрана и относительные координаты | C# WPF приложение
•
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Button"| координаты экрана и относительные координаты | C# WPF приложение
•
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Grid и рисуем линию"| C# WPF приложение
•
Пример "При двойном нажатии левой клавишей мыши на Grid показываем сообщение"| C# WPF приложение
WPF элементы
Label
•
Пример "Устанавливаем текст в Label" через c# код | WPF приложение
иконки FontAwesome
•
Пример "Показываю иконки, для иконки подключаю библиотеку fontawesome5" | C# WPF приложение
•
Пример "Делаю анимацию для иконки, библиотека fontawesome5" | C# WPF приложение
TextBlock
•
Пример "Устанавливаем текст в TextBlock используя Binding". Еще добавим двойной Bindning используя INotifyPropertyChanged | C# WPF приложение
•
Пример "Несколько TextBlock (показываем тексты) и делаем так чтобы при mouse move выделялся элемент где мышка (mouse over)" | C# WPF приложение
•
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на TextBlock"| координаты экрана и относительные координаты | C# WPF приложение
Button
•
Пример "Получаем координаты мыши при нажатии левой клавишей мыши на Button"| координаты экрана и относительные координаты | C# WPF приложение
TextBox
•
Пример "Устанавливаем и получаем текст в TextBox используя Binding" | C# WPF приложение
•
Пример "Устанавливаем текст в TextBox" через c# код | WPF приложение
TextBox с Place Holder
•
Пример "Показываем Place Holder в TextBox" | WPF приложение
•
Пример "Показываем Place Holder с иконкой в TextBox", для иконки подключаю библиотеку fontawesome5 | WPF приложение
TextBox с проверкой текста (валидация)
•
Пример "Устанавливаем текст в TextBox используя Binding и делаем валидацию (если текст не правильный)" | C# WPF приложение
ComboBox
•
Пример "В ComboBox делаем редактирование текста. Получаем текст используя Binding" | C# WPF приложение
ItemsControl
•
Пример "ItemsControl, кнопка и обработчик нажатия" | WPF приложение
Grid
•
Что такое Grid в WPF
•
Как добавить RowDefinition, ColumnDefinition в Grid (мышкой в XAML design editor) | C# WPF приложение
•
В Grid добавляем vertical scrolling | WPF приложение
DataGrid
•
Пример "DataGrid делаем bind данных", кнопка и обработчик нажатия в DataGrid, выравнивание текста в DataGrid, scrolling | WPF приложение
•
Как сделать scrolling для DataGrid ? | C# WPF приложение
•
Scrolling для DataGrid (чтобы скролинг работал когда мы крутим колесо мышки и мышка находится вне scroll bar) | C# WPF приложение
•
Как выделить row цветом при нажатии на row мышкой (change background for selected row) в DataGrid ? | C# WPF приложение
•
Как row DataGrid выделить цветом (сделать background) ? | C# WPF приложение
•
Пример "DataGrid делаем сортировку колонки по своему алгоритму (Custom Sort)" | WPF приложение
DataGrid внутри DataGrid
•
Пример портфолио сотрудников с описанием задач: "DataGrid внутри DataGrid используя RowDetailsTemplate" | WPF приложение
ListView
•
Пример "В ListView расширяем колонку при добавлении данных (auto column width)" | WPF приложение
•
Пример "В ListView используем ItemTemplate DataTemplate" | WPF приложение
ScrollViewer
•
В Grid добавляем vertical scrolling | WPF приложение
•
Как сделать scrolling для DataGrid ? | C# WPF приложение
•
Scrolling для DataGrid (чтобы скролинг работал когда мы крутим колесо мышки и мышка находится вне scroll bar) | C# WPF приложение
•
Пример "Делаем ScrollBar меньше(больше) в ScrollViewer" | C# WPF приложение
Resource файл
•
Добавляем картинку (jpg, bmp, png) в проект и помечаем как Resource | C# WPF приложение
Image
•
В элементе Image показываем картинку (jpg, bmp, png) из Resource | C# WPF приложение
•
Выбираем картинку (jpg, bmp, png) из компьютера и показываем в элементе Image. Сохраняем картинку в базу данных | C# WPF приложение
•
Пример "В Image элементе делаем Binding для Source" | C# WPF приложение
•
Пример "Конвертируем текст base64 в картинку Bitmap и показываем в Image элементе" | C# WPF приложение
•
Пример "Открываем SVG файл и показываем картинку в Image элементе" | C# WPF приложение
Canvas
•
Пример "Создаем Canvas и рисуем картинку" C# WPF
•
Пример "Рисуем картинку с движением на Canvas" C# WPF
•
Пример "Рисуем картинку с движением и анимацией sprite на Canvas" C# WPF
Line
•
Рисуем Line (сплошная и штриховая линии) | C# WPF приложение
•
Пример "Создаем и рисуем линию при нажатии левой клавишей мыши на Grid"| Grid Line | C# WPF приложение
Конвертируем картинку в XAML Path Geometry
•
Конвертируем SVG в XAML(используя Adobe Illustrator), заполняем Path Data Geometry, показываем линии на экране | C# WPF приложение
•
Конвертируем SVG в XAML(используя Dias SVG to UWP XAML Converter), заполняем Path Data Geometry, показываем линии на экране | C# WPF приложение
•
Конвертируем PNG в SVG в XAML | C# WPF приложение
•
Converter SVG to XAML | WPF C#
•
Конвертируем XAML в SVG | C# WPF приложение
ViewBox
•
Пример "ViewBox делаем Binding для Left, Top, Width, Height, ContetnPresenter binding" | C# WPF приложение
Width by percentage
•
Разделить экран по вертикали (по ширине) на 2 равные части экран (width1 = 50%, width2 = 50%), используем Grid | C# WPF приложение
•
Разделить экран по вертикали (по ширине) на 2 части (width1 = 70%, width2 = 30%), используем Grid | C# WPF приложение
•
Пример "Устанавливаем ширину элемента в процентах от ширины родительского элемента" (width in percentage), пишем свой IValueConverter | C# WPF приложение
База данных (Entity Framework)
•
Entity Framework в приложении WPF. Используем Code First (пишем c# код, а таблицы в базе данных создаются сами)
Создаем свои WPF элементы
•
Пример "Создаем свой WPF элемент используя Style и новый xaml файл. Новый элемент это: вверху Title, внизу текст в рамке. Используем Binding | C# WPF приложение
•
Пример "Создаем свой новый WPF элемент со своими свойсвами в новом cs и xaml файлах. В WPF новом элементе: вверху Title, снизу текст и в рамке | C# WPF приложение
WPF приложение с библиотекой Prism (MVVM шаблон проектирования)
•
Создаем новое WPF приложение с Prism Unity (разделение проекта на папки Services, Views, ViewModels). Патерн MVVM (Model-View-ViewModel) | C#
•
WPF приложение с Prism Unity. В приложении Tab и разделения на отдельные xaml используя Region.
WPF приложение с Locator (MVVM шаблон проектирования)
•
Создаем новое WPF приложение с Locator (разделение проекта на папки Views, ViewModels)
•
Как добавить Dependency Injection, загрузку из appsettings.json в новом WPF приложении ?
Автоматические тесты
•
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)
Вопросы на собеседованиях
•
В чем отличие static resource от dynamic resource ? | WPF C#
Дополнительные темы, вопросы
•
Открываем окно свойств (properties) для графического элемента в WPF приложении C#
Ошибки
•
Ошибка "To run this application, you must install .NET. Would you like to download it now?" | Запускаю WPF приложение на C#
Книги
•
Книги для изучения WPF
Ваши вопросы присылайте по почте:
info@dir.by