IOC DI全球构想

时间:2018-09-18 08:28:00

标签: c# wpf dependency-injection inversion-of-control ioc-container

关于IOC DI和总体构想,我有两个问题。

首先,我有一个接口和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();
        }
    }

问题是当我解决可以使用的mainWindows时

 Container.RegisterType<IMainWindowViewModel, MainWindowViewModel>(new InjectionConstructor(new ResolvedParameter<IConfigurationManagement>(TAG)));

但是,如果用户可以在应用程序运行时选择“测试模式”,则稍后需要解析Class3。我不希望在mainWindows类中访问IOC,所以我不知道该怎么办。

另一个问题,更多是关于全球概念。我有一个具有多个实现的接口,但是它们应该同时存在(注入)在我的应用程序中,所以对我来说,这意味着我的接口是错误的,我应该具有另一层接口?

编辑:

目前我有这样的东西:

 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种不同实现(Class1,Class2,Class3)的ISynoptique实例。那么对于我来说,如果我需要在同一时间居住不同的实现,这可能是我的观念上的错误,也许他们不应该拥有相同的合同(接口)。

谢谢,蒂伯。

0 个答案:

没有答案