В основном DI-контейнер пытается создавать экземпляры интерфейсов посредством какого-либо отображения.Поэтому, когда вы пишете
container.RegisterType<IBar, MyBar>();
, container
знает, всякий раз, когда меня просят создать какой-то экземпляр для IBar
, я разрешаю этот вызов, создавая экземпляр MyBar
.
Однако контейнерне знает, что делать, что делать, если его запрашивают для экземпляра IFoo
, потому что не каждый IFoo
является IBar
.Итак, что должно быть возвращено при написании этого:
container.GetInstance<IFoo>();
В вашем случае возможен только один тип, IBar
, для которого, в свою очередь, также возможен только один тип.Это, однако, противоречит назначению интерфейсов, поскольку фактически оно всегда ограничено одним конкретным типом, в то время как он должен работать с любым типом, реализующим этот интерфейс.
Вот почему у вас естьопределить сопоставление для обоих интерфейсов.