teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/05/27 01:04

投稿

退会済みユーザー
answer CHANGED
@@ -7,4 +7,46 @@
7
7
 
8
8
  ASP.NET Core アプリでは作成したプロジェクトに IConfiguration オブジェクトを DI コンテナに登録し、必要に応じて Controller や Page のコンストラクタ経由で DI できる機能が実装されます。
9
9
 
10
- Blazor Server はほとんど触ったことはないのでよくわかりませんが、テンプレートで生成された Program.cs を見ると同様ではないかと思われます。
10
+ Blazor Server はほとんど触ったことはないのでよくわかりませんが、テンプレートで生成された Program.cs を見ると同様ではないかと思われます。
11
+
12
+ **【追記】**
13
+
14
+ VS2019 のテンプレートで作る Blazor Server プロジェクトにも DI 機能は組み込まれるようですが、Blazor Server はステートフルという特殊事情があって、「Entity Framework Core を使用するための特別なアプローチが必要です」ということだそうです。詳しくは以下の記事を見てください。
15
+
16
+ ASP.NET Core Blazor Server と Entity Framework Core (EFCore)
17
+ [https://docs.microsoft.com/ja-jp/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-5.0](https://docs.microsoft.com/ja-jp/aspnet/core/blazor/blazor-server-ef-core?view=aspnetcore-5.0)
18
+
19
+ 上の記事に以下のコードがあります。
20
+
21
+ ```
22
+ services.AddDbContextFactory<ApplicationDbContext>(options =>
23
+ {
24
+ options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
25
+ });
26
+ ```
27
+
28
+ 試したわけではないので想像レベルですが、コンテキストクラスに以下のようなコンストラクタが定義されていて、
29
+
30
+ ```
31
+ public partial class ApplicationDbContext : DbContext
32
+ {
33
+ public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
34
+ : base(options)
35
+ {
36
+ }
37
+
38
+ // ・・・中略・・・
39
+ }
40
+ ```
41
+
42
+ appsettings.json に、上のコードの "DefaultConnection" に該当する接続文字列情報が含まれていれば DI できるようです。
43
+
44
+ ```
45
+ {
46
+ "ConnectionStrings": {
47
+ "DefaultConnection": "接続文字列"
48
+ }
49
+ }
50
+ ```
51
+
52
+ Blazor Server はステートフルという特殊事情のためいろいろ対応が必要なようです。