У меня есть два вопроса относительно DOC IOC и общей концепции.
Во-первых, у меня есть один интерфейс и 3 разных реализации. У меня есть мой IOC, который регистрирует все мои интерфейсы / реализации в начале моего приложения (WPF). Для двух из этих реализаций я знаю, что разрешить во время загрузки, но другую я не могу знать, пока я полностью не загрузил приложение. (Я мог бы догадаться, какой из них загрузить, но это будет сложно и не очень долго). Итак, мой вопрос, что мне здесь не хватает? Поскольку я не хочу разрешать позже в моем коде.
РЕДАКТИРОВАТЬ:
public interface IConfigurationManagement
{
void GetItem();
}
/// <summary>
/// Class1 is register with a TAG at the startup and resolved aswell because it's used by mainWindows (simplified)
/// </summary>
public class Class1 : IConfigurationManagement
{
public void GetItem()
{
throw new NotImplementedException();
}
}
/// <summary>
/// Class2 is register with a TAG at the startup and resolved aswell because it's used by mainWindows (simplified)
/// </summary>
public class Class2 : IConfigurationManagement
{
public void GetItem()
{
throw new NotImplementedException();
}
}
/// <summary>
/// Class1 is register with a TAG at the startup and resolved aswell because it's used by mainWindows (simplified)
/// </summary>
public class Class3 : IConfigurationManagement
{
public void GetItem()
{
throw new NotImplementedException();
}
}
Проблема в том, что когда я решаю основные Windows, я могу использовать
Container.RegisterType<IMainWindowViewModel, MainWindowViewModel>(new InjectionConstructor(new ResolvedParameter<IConfigurationManagement>(TAG)));
Но мне нужно будет разрешить Class3 позже, если пользователь сможет выбрать «тестовый режим» во время работы приложения. Чего я не хочу, так это доступа к своему IOC в моем классе mainWindows, поэтому я не знаю, что делать.
Другой вопрос, это больше о глобальной концепции. У меня есть интерфейс, который будет иметь несколько реализаций, но они должны жить (вставляться) все вместе в моем приложении, так что для меня это означает, что мой интерфейс неправильный, и у меня должен быть другой уровень интерфейсов?
РЕДАКТИРОВАТЬ:
В настоящее время у меня есть что-то вроде этого:
public interface ISynoptique
{
void Run();
}
/// <summary>
/// Class1 is register with a TAG at the startup and resolved aswell because it's used by mainView (simplified)
/// </summary>
public class Class1 : ISynoptique
{
public void Run()
{
throw new NotImplementedException();
}
}
/// <summary>
/// Class2 is register with a TAG at the startup and resolved aswell because it's used by mainView (simplified)
/// </summary>
public class Class2 : ISynoptique
{
public void Run()
{
throw new NotImplementedException();
}
}
/// <summary>
/// Class1 is register with a TAG at the startup and resolved aswell because it's used by mainView (simplified)
/// </summary>
public class Class3 : ISynoptique
{
public void Run()
{
throw new NotImplementedException();
}
}
Я хочу, чтобы в MainWindowViewModel было как минимум 3 экземпляра ISynoptique с 3 различными реализациями (Class1, Class2, Class3). Тогда для меня здесь ошибка в моей концепции, если мне нужны разные реализации, живущие в одно и то же время, возможно, они не должны иметь один и тот же контракт (интерфейс).
Спасибо, Тибо.