7

Unity では、同じインターフェイスのさまざまな実装に名前を付けて、それらを名前で解決できます。

var container = new UnityContainer();

// register
container.Register<IFish, OneFish>("One");
container.Register<IFish, TwoFish>("Two");

// resolve
var twoFish = container.Resolve("Two");

ここで、IFish に依存し、ITank を実装するクラスがあるとします。

class Tank : ITank
{
   public Tank(IFish fish) {...}
}

ITank を解決し、取得する IFish の実装を指定するにはどうすればよいですか?

これは機能しません:

container.Register<ITank, Tank>();

var tank = container.Resolve<ITank>("One");

これは機能します:

var fish = container.Resolve<IFish>("One");

var tank = container.Resolve<Tank>(new DependencyOverride(typeof(IFish), fish);

ただし、「One」という名前の実装が多数存在する可能性がある一般的なケースではなく、単純なケース (この例など) のみを処理します。私が欲しいのは、Unityに伝えることができることです:

「「One」という名前の使用実装を解決するとき、そのような実装が登録されていない場合は、名前のない実装にフォールバックします」

この動作で Unity にプラグインできるカスタム リゾルバーはありますか?

4

1 に答える 1