《困っていること》
prism full appを参考に、インターフェースを自作し、ViewModelにDI注入したいが、うまくいかない。
《やりたいこと》
・EmployeeListViewModelにIEmployeeServiceを入れ、GetEmployees()でデータを取得したい。
C#
1 public class EmployeeListViewModel : RegionViewModelBase 2 { 3 public EmployeeListViewModel(IRegionManager regionManager, IEmployeeService employeeService) : base(regionManager) 4 { 5 // 理想 6 employeeService.GetEmployees(); 7 } 8 9 public ReactiveCollection<DtEmployee> EmployeeList { get; set; } = new ReactiveCollection<DtEmployee>(); 10 } 11
《現状》
・IEmployeeServiceをコンストラクタの引数に指定することで、コンストラクタ内を通らなくなる。
・IEmployeeServiceを消すと、コンストラクタは実行される。
コードは以下です。
app.xaml.cs
C#
1namespace EES 2{ 3 /// <summary> 4 /// Interaction logic for App.xaml 5 /// </summary> 6 public partial class App 7 { 8 protected override Window CreateShell() 9 { 10 return Container.Resolve<MainWindow>(); 11 } 12 13 protected override void RegisterTypes(IContainerRegistry containerRegistry) 14 { 15 containerRegistry.RegisterSingleton<IEmployeeService, EmployeeService>(); 16 } 17 18 protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog) 19 { 20 moduleCatalog.AddModule<EmployeeInfoModule>(); 21 } 22 } 23}
EmployeeInfoModule.cs
C#
1namespace EES.Modules.EmployeeInfo 2{ 3 public class EmployeeInfoModule : IModule 4 { 5 private readonly IRegionManager _regionManager; 6 7 public EmployeeInfoModule(IRegionManager regionManager) 8 { 9 _regionManager = regionManager; 10 } 11 12 public void OnInitialized(IContainerProvider containerProvider) 13 { 14 _regionManager.RequestNavigate(RegionNames.ContentRegion, "EmployeeList"); 15 } 16 17 public void RegisterTypes(IContainerRegistry containerRegistry) 18 { 19 containerRegistry.RegisterForNavigation<EmployeeList>(); 20 } 21 } 22}
EmployeeListViewModel.cs
C#
1namespace EES.Modules.EmployeeInfo.ViewModels 2{ 3 public class EmployeeListViewModel : RegionViewModelBase 4 { 5 public EmployeeListViewModel(IRegionManager regionManager, IEmployeeService employeeService) : base(regionManager) 6 { 7 this.EmployeeList.Add(new DtEmployee() { EmployeeId = 1, Name = "¼–{" }); 8 this.EmployeeList.Add(new DtEmployee() { EmployeeId = 2, Name = "ŽR“c" }); 9 } 10 11 public ReactiveCollection<DtEmployee> EmployeeList { get; set; } = new ReactiveCollection<DtEmployee>(); 12 } 13}
IEmployeeService.cs
C#
1using EES.Database.Entities; 2using System; 3using System.Collections.ObjectModel; 4 5namespace EES.Services.Interfaces 6{ 7 public interface IEmployeeService 8 { 9 ObservableCollection<DtEmployee> GetEmployees(); 10 } 11}
EmployeeService.cs
C#
1namespace EES.Service 2{ 3 public class EmployeeService : IEmployeeService 4 { 5 6 private readonly ITransactionContext _transactionContext; 7 8 public EmployeeService(ITransactionContext transactionContext) 9 { 10 _transactionContext = transactionContext; 11 } 12 13 public ObservableCollection<DtEmployee> GetEmployees() 14 { 15 ObservableCollection<DtEmployee> list = new ObservableCollection<DtEmployee>(); 16 17 list.Add(new DtEmployee() { EmployeeId = 1, Name = "¼–{X" }); 18 list.Add(new DtEmployee() { EmployeeId = 2, Name = "ŽR“cX" }); 19 20 return list; 21 22 } 23 } 24}
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー