Prism とか コンテナを Microsoft.Extensions.DependencyInjection 化できないけど IServiceCollection 使いたいときに使うライブラリ DryIoc.Microsoft.DependencyInjection.Extension を作りました。


必要があったので DryIoc に IServiceCollection ベースで登録する為の DryIoc.Microsoft.DependencyInjection.Extension を作成しました。

DryIoc.Microsoft.DependencyInjection.Extension 1.0.0.2

できること

このライブラリでできることは DryIoc で DryIoc.Microsoft.DependencyInjection 拡張を使えない環境でもできるかぎり IServiceCollection を登録できるようにするということです。

具体的に見ていきましょう。

Prism だと次の様に登録に使います。

using DryIoc.Microsoft.DependencyInjection.Extension
// ...
Registry.GetContainer().RegisterServices(v =>
{
    v.AddTransient<IA>(v => new A1());
});
// ...

使い方のアイディア的には Prism.Container.ExtensionsPrism.Microsoft.DependencyInjection.Extensions と同じです。

ただし、こちらは Xamarin じゃなくても動きますし、そもそも Prism 自体をターゲットにしているわけでもないです。(というか Xamarin じゃないと動かないとあったのでこれを作ったので。

制限事項

現在わかっているのは DryIoc のコンテナを作成する際に WithConcreteTypeDynamicRegistrations しているとコンストラクタインジェクション時に登録していないオブジェクトを挿入してしまう為、想定されないコンストラクタを選択されてしまうということですね。例えば ILoggerFactory とか。
なので、登録する前あたりに 想定されたコンストラクタで呼び出す様に登録してやってください。

以上。

不具合等ありましたら。issues まで。