より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

UnityContainerでよくやる失敗「 'IUnityContainer.Resolve(Type, string, params ResolverOverride[])' は型引数と一緒には使用できません。 」

プライベートのXamarin開発ではUnityContainerを使ってます。

www.nuget.org

UnityというとゲームエンジンのUnityを思い浮かべる方が多いでしょうし、私自身もそうでした。

職場で導入された影響で使い始めたのですが、UnityContainerは依存性の注入を行うための仕組みです。

どうしてもiOSAPIを使わざるを得ないケースでUnityContainer経由で処理し、同じビジネスロジックで処理するといったことをやっています。

そのUnityContainerを使っていて、私がよくやりがちな失敗を。

f:id:rimever:20190326075541p:plain

CS0308 非ジェネリック メソッド 'IUnityContainer.Resolve(Type, string, params ResolverOverride[])' は型引数と一緒には使用できません。

下記のようなスクリーンショットを取る処理なのですが、処理をどこまで調べたところで問題は見つかりません。

                ContainerSource.Container.Resolve<IScreenShotService>().Capture();
                ContainerSource.Container.Resolve<IDialogService>().ShowDialog(this
                    , "スクリーンショットを取りました。", "完了"
                    , DialogButton.Ok, DialogIcon.Information
                    , result => { });

原因としてはExtensionの関数を使っているので

using Microsoft.Practices.Unity;

using処理が必要です。

私がただのコピペソースをしているのがそもそもまずいのですが。