feat(04-10): register Phase 4 DI + wire MainWindow tabs + TemplatesView
- App.xaml.cs: register TemplateRepository, GraphClientFactory, ICsvValidationService, BulkResultCsvExportService - App.xaml.cs: register BulkMemberService, BulkSiteService, ITemplateService, IFolderStructureService - App.xaml.cs: register all 5 Phase 4 ViewModels and Views (Transfer, BulkMembers, BulkSites, FolderStructure, Templates) - MainWindow.xaml: replace 3 FeatureTabBase stub tabs with 5 named TabItems (tab.transfer through tab.templates) - MainWindow.xaml.cs: wire all 5 new TabItem.Content from DI-resolved Views
This commit is contained in:
@@ -119,12 +119,38 @@ public partial class App : Application
|
||||
services.AddTransient<Func<TenantProfile, SitePickerDialog>>(sp =>
|
||||
profile => new SitePickerDialog(sp.GetRequiredService<ISiteListService>(), profile));
|
||||
|
||||
// Phase 4: Bulk Operations Infrastructure
|
||||
var templatesDir = Path.Combine(appData, "templates");
|
||||
services.AddSingleton(_ => new TemplateRepository(templatesDir));
|
||||
services.AddSingleton<GraphClientFactory>();
|
||||
services.AddTransient<ICsvValidationService, CsvValidationService>();
|
||||
services.AddTransient<BulkResultCsvExportService>();
|
||||
|
||||
// Phase 4: File Transfer
|
||||
services.AddTransient<IFileTransferService, FileTransferService>();
|
||||
services.AddTransient<BulkResultCsvExportService>();
|
||||
services.AddTransient<TransferViewModel>();
|
||||
services.AddTransient<TransferView>();
|
||||
|
||||
// Phase 4: Bulk Members
|
||||
services.AddTransient<IBulkMemberService, BulkMemberService>();
|
||||
services.AddTransient<BulkMembersViewModel>();
|
||||
services.AddTransient<BulkMembersView>();
|
||||
|
||||
// Phase 4: Bulk Sites
|
||||
services.AddTransient<IBulkSiteService, BulkSiteService>();
|
||||
services.AddTransient<BulkSitesViewModel>();
|
||||
services.AddTransient<BulkSitesView>();
|
||||
|
||||
// Phase 4: Templates
|
||||
services.AddTransient<ITemplateService, TemplateService>();
|
||||
services.AddTransient<TemplatesViewModel>();
|
||||
services.AddTransient<TemplatesView>();
|
||||
|
||||
// Phase 4: Folder Structure
|
||||
services.AddTransient<IFolderStructureService, FolderStructureService>();
|
||||
services.AddTransient<FolderStructureViewModel>();
|
||||
services.AddTransient<FolderStructureView>();
|
||||
|
||||
services.AddSingleton<MainWindow>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,14 +53,20 @@
|
||||
<TabItem x:Name="DuplicatesTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.duplicates]}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.templates]}">
|
||||
<controls:FeatureTabBase />
|
||||
<TabItem x:Name="TransferTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.transfer]}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.bulk]}">
|
||||
<controls:FeatureTabBase />
|
||||
<TabItem x:Name="BulkMembersTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.bulkMembers]}">
|
||||
</TabItem>
|
||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.structure]}">
|
||||
<controls:FeatureTabBase />
|
||||
<TabItem x:Name="BulkSitesTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.bulkSites]}">
|
||||
</TabItem>
|
||||
<TabItem x:Name="FolderStructureTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.folderStructure]}">
|
||||
</TabItem>
|
||||
<TabItem x:Name="TemplatesTabItem"
|
||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.templates]}">
|
||||
</TabItem>
|
||||
<!-- Settings tab: content set from code-behind via DI-resolved SettingsView -->
|
||||
<TabItem x:Name="SettingsTabItem"
|
||||
|
||||
@@ -32,6 +32,13 @@ public partial class MainWindow : Window
|
||||
// Replace Duplicates tab placeholder with the DI-resolved DuplicatesView
|
||||
DuplicatesTabItem.Content = serviceProvider.GetRequiredService<DuplicatesView>();
|
||||
|
||||
// Phase 4: Replace stub tabs with DI-resolved Views
|
||||
TransferTabItem.Content = serviceProvider.GetRequiredService<TransferView>();
|
||||
BulkMembersTabItem.Content = serviceProvider.GetRequiredService<BulkMembersView>();
|
||||
BulkSitesTabItem.Content = serviceProvider.GetRequiredService<BulkSitesView>();
|
||||
FolderStructureTabItem.Content = serviceProvider.GetRequiredService<FolderStructureView>();
|
||||
TemplatesTabItem.Content = serviceProvider.GetRequiredService<TemplatesView>();
|
||||
|
||||
// Replace Settings tab placeholder with the DI-resolved SettingsView
|
||||
SettingsTabItem.Content = serviceProvider.GetRequiredService<SettingsView>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user