Prism.DryIoc でも Microsoft.Extensions.Logging や Microsoft.EntityFrameworkCore が使いたい
WPF の優れたフレームワークの1つである Prism (PrismLibrary) の悩み事の1つに、そのままでは Microsoft.Extensions.DependencyInjection (以下、MSDI) の機能が利用できないことがある。
Prism では Microsoft.Extensions.Logging (以下、MSLogging) が使用できるだろうか?答えは YES である。
結論
DryIoc.Microsoft.DependencyInjection
のNuGetパッケージをインストールし、App.xaml.cs を以下のように編集する。
// 以下のusingは拡張メソッドのために必須 using DryIoc.Microsoft.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Prism.Ioc; public partial class App : Prism.DryIoc.PrismApplication { // ...中略... protected override Prism.Ioc.IContainerExtension CreateContainerExtension() { var serivces = new ServiceCollection(); services.AddLogging(options => { // Todo: ここにLoggerの設定を記述 }); services.AddDbContext<DbContext>(/*Todo: ここにDatabaseの設定を記述*/); var container = new DryIoc.Container(CreateContainerRules()) .WithDependencyInjectionAdapter(services); return new Prism.DryIoc.DryIocContainerExtension(container); } }
これにより、以下のようなクラス名をカテゴリとする ILogger
public class SampleClass { public SampleClass(Microsoft.Extensions.Logging.ILogger<SampleClass> logger) { logger.LogInformation("SampleClass created."); } }
また、Microsoft.EntityFrameworkCore の内部で使用されるログ情報も正常に取得できるようになった。