Это краткое описание проблемы:
У меня есть иерархия из нескольких интерфейсов (
Код: Выделить всё
IRobotКод: Выделить всё
IPlayer). Каждый листовой интерфейс, конечно, имеет свои классы реализации (RobotВ классе GameModule (дочернем элементе Prism.Modularity.IModule) происходит регистрация всех реализаций в том же родительском интерфейсе, что и синглтоны:
Код: Выделить всё
public class GameModule: IModule
{
private void RegisterPlayers(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton();
containerRegistry.RegisterSingleton();
[...]
}
}
Код: Выделить всё
public class BattleGrid
{
private readonly IEnumerable _players;
public BattleGrid(IEnumerable players){
_players = players;
}
public void InitializeAllPlayers() => _players .ForEachDo(player=>player.Initialize());
}
Сейчас я использовал этот "трюк с двойной регистрацией", но он мне не очень нравится: в классе GameModule я сначала регистрирую все реализации со связанным интерфейсом, затем я регистрирую список IPlayer, разрешая каждый зарегистрированный интерфейс:
Код: Выделить всё
public class GameModule: IModule
{
private void RegisterPlayers(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton();
containerRegistry.RegisterSingleton();
[...]
containerRegistry.RegisterSingleton(
container => new List
{
container.Resolve(),
container.Resolve(),
[...]
}
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... tered-in-i