МОК Д.И. Глобальная концепция - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть два вопроса относительно 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). Тогда для меня здесь ошибка в моей концепции, если мне нужны разные реализации, живущие в одно и то же время, возможно, они не должны иметь один и тот же контракт (интерфейс).

Спасибо, Тибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...