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