Я, кажется, нашел ответы на свои вопросы (см. Мои комментарии к ответу Ханса Джонуса).
В случае наследования интерфейса существует свободный API, в котором вы можете указать, какой интерфейс должен использовать сервис.
Используя пример, упомянутый в вопросе:
container.Register(Classes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithService.FirstInterface());
Это позволяет вам разрешать определенные экземпляры классов A и B, используя
I2 ObjA = container.Resolve<I2>();
I3 ObjB = container.Resolve<I3>();
Или, если вычтобы получить все экземпляры, которые реализуют базовый интерфейс (I1
), вы должны зарегистрироваться таким образом.
container.Register(Classes.FromAssemblyNamed("TestAssembly")
.BasedOn<I1>()
.WithService.AllInterfaces()
);
Таким образом, вы можете делать все, что хотите, я имею в виду.
I2 ObjA = container.Resolve<I2>();
I3 ObjB = container.Resolve<I3>();
I1[] ObjArray = container.ResolveAll<I1>();
Но это увеличивает размер контейнера.Я не уверен, как это влияет на производительность.Я опубликую свои выводы, как я выясняю.Я ценю любые комментарии по этому вопросу.Благодаря.