私は次のオブジェクト構造を持っています
public interface IParser {}
public interface IAction : IParser {}
public interface ICommand : IParser {}
//impl
public class Action1 : IAction {}
public class Command1 : ICommand {}
//registration
container.Register<IAction, Action1>();
container.Register<ICommand, Command1>();
//resolve
var parsersList = container.Resolve<IList<IParser>>() //expected: parsersList.Count=2 actual count=0
DryIOC でこれらの親インターフェイスと子インターフェイスの間で何らかのバインディングを行う方法はありますか?
編集:
私はいくつかの調査を行い、RegisterMany がそのトリックを実行したことを発見しましたが、少し混乱しています。
//registration
//container.Register<IAction, Action1>(); //if I drop these two lines \_____
//container.Register<ICommand, Command1>(); / |
container.RegisterMany<Action1>(); // and use these lines |
container.RegisterMany<Command1>(); |
//resolve |
var parsersList = container.Resolve<IList<IParser>>() //WORKS Count = 2 |
container.Resolve<IAction>() //not working Unable to resolve IAction <---|
container.Resolve<ICommand>() //Same here for ICommand <---|
container.Resolve<IParser>() //not working either
上記の個々の登録行のコメントを解除すると、Resolve は IAction と ICommand では機能しますが、IParser では機能しません。
RegisterMany
親タイプが正しく登録されていないようです...
編集2:
を使用して、登録を次のように変更しましたRegisterMapping
container.Register<IAction, Action1>();
container.Register<ICommand, Command1>();
container.RegisterMapping<IParsable, ICommand>(); //1st registered mapping
container.RegisterMapping<IParsable, IAction>();
container.Resolve<IList<IParser>>().Count = 1 //instead of 2.
IParsers リストの項目は、最初に登録されたマッピングのタイプです。この場合ICommand
私はDryIOC v2.6.2を使用しています