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 =>
|
services.AddTransient<Func<TenantProfile, SitePickerDialog>>(sp =>
|
||||||
profile => new SitePickerDialog(sp.GetRequiredService<ISiteListService>(), profile));
|
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
|
// Phase 4: File Transfer
|
||||||
services.AddTransient<IFileTransferService, FileTransferService>();
|
services.AddTransient<IFileTransferService, FileTransferService>();
|
||||||
services.AddTransient<BulkResultCsvExportService>();
|
|
||||||
services.AddTransient<TransferViewModel>();
|
services.AddTransient<TransferViewModel>();
|
||||||
services.AddTransient<TransferView>();
|
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>();
|
services.AddSingleton<MainWindow>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,14 +53,20 @@
|
|||||||
<TabItem x:Name="DuplicatesTabItem"
|
<TabItem x:Name="DuplicatesTabItem"
|
||||||
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.duplicates]}">
|
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.duplicates]}">
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.templates]}">
|
<TabItem x:Name="TransferTabItem"
|
||||||
<controls:FeatureTabBase />
|
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.transfer]}">
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.bulk]}">
|
<TabItem x:Name="BulkMembersTabItem"
|
||||||
<controls:FeatureTabBase />
|
Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.bulkMembers]}">
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{Binding Source={x:Static loc:TranslationSource.Instance}, Path=[tab.structure]}">
|
<TabItem x:Name="BulkSitesTabItem"
|
||||||
<controls:FeatureTabBase />
|
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>
|
</TabItem>
|
||||||
<!-- Settings tab: content set from code-behind via DI-resolved SettingsView -->
|
<!-- Settings tab: content set from code-behind via DI-resolved SettingsView -->
|
||||||
<TabItem x:Name="SettingsTabItem"
|
<TabItem x:Name="SettingsTabItem"
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ public partial class MainWindow : Window
|
|||||||
// Replace Duplicates tab placeholder with the DI-resolved DuplicatesView
|
// Replace Duplicates tab placeholder with the DI-resolved DuplicatesView
|
||||||
DuplicatesTabItem.Content = serviceProvider.GetRequiredService<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
|
// Replace Settings tab placeholder with the DI-resolved SettingsView
|
||||||
SettingsTabItem.Content = serviceProvider.GetRequiredService<SettingsView>();
|
SettingsTabItem.Content = serviceProvider.GetRequiredService<SettingsView>();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user