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 にプラグインできるカスタム リゾルバーはありますか?