前提・実現したいこと
はじめまして。
最近、独学でプログラムとC#を勉強し始めた者です。
.Net Core + EF Core + Prism + ReactivePropertyを使用して、
一気に勉強できたらなと思い挑戦しています。
今回は、SQLServerに接続する際に毎度usingを記載するのが、
視覚的に読みづらくなると個人的に思い、改善したく質問させていただきます。
自分で調べた結果、ASP.Net CoreではDIコンテナを使用した方法があると知り、
同じような形でできないかと挑戦しましたが、どう実装していいのか。
お力を借りたく存じます。
環境
.Net Core 3.1
EF Core 3.1.7
Prism Core 7.2.0
ソースコード
現状のソースコードを貼ります。
App.xaml.cs
namespace TempWpfApp { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App { protected override Window CreateShell() => Container.Resolve<MainWindow>(); protected override void RegisterTypes(IContainerRegistry container) { container.RegisterForNavigation<HomeView>(); } protected override void OnInitialized() { base.OnInitialized(); Container.Resolve<IRegionManager>().RequestNavigate("MainRegion", nameof(HomeView)); } } }
HomeViewModel.cs
namespace TempWpfApp.ViewModels { class HomeViewModel { private HomeModel model = new HomeModel(); public HomeViewModel() { this.model = new HomeModel(); this.Input.Value = this.model.Input; } public ReactivePropertySlim<string> Input { get; } = new ReactivePropertySlim<string>(); } }
HomeModel.cs
namespace TempWpfApp.Models { class HomeModel: BindableBase { public HomeModel() { // ここを改善したい using (var db = new DataContext()) { // データを取得(Inputにデータ挿入) } } private string input = "Home"; public string Input { get { return input; } set { SetProperty(ref input, value); } } } }
DataContext.cs
namespace TempWpfApp.Database { public class DataContext : DbContext { public DbSet<User> User { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(new DbConnection().GetConnectionString()); } } }
試したこと
ASP.Net Coreではstartup.csに以下を記述することで、
HomeViewModelを呼んだ際にDIコンテナがDataContextを自動で注入してくれるとのことでした。
しかし、.Net CoreではConfigureServices(IServiceCollection services)をどこで呼べばいいのか、
HomeViewModelではinterfaceでないからダメと問題が多発しました。
startup.cs
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<DataContext>(options => { options.UseSqlServer("接続文字列"); }); }
public class HomeViewModel { readonly DataContext _dataContext ; public HomeViewModel(DataContext dataContext ) { _dataContext = dataContext ; } ... }
補足情報
質問以外の部分でも、修正した点がよい箇所が有りましたら、
指摘いただければと思います。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー