Dependency injection 使用依赖项注入来决定在运行时创建哪个实现

Dependency injection 使用依赖项注入来决定在运行时创建哪个实现,dependency-injection,Dependency Injection,我正在编写一个桌面GIS应用程序,它支持MapXtreme、MS Virtual Earth和我们的自定义地图引擎。应用程序的用户可以在运行时通过从dropdownlist中选择来更改地图引擎。我有一个工厂类来更改这样的地图引擎 public class MapFactory implements IMapFactory { public IMapEngine createInstance(MapType type) { if(type==MapType.MapXt

我正在编写一个桌面GIS应用程序,它支持MapXtreme、MS Virtual Earth和我们的自定义地图引擎。应用程序的用户可以在运行时通过从dropdownlist中选择来更改地图引擎。我有一个工厂类来更改这样的地图引擎

public class MapFactory implements IMapFactory
{
    public IMapEngine createInstance(MapType type)
    {
       if(type==MapType.MapXtreme)
          return new MapXtremeEngine();
       else if(type==MapType.VirtualEarth)
          return new VirtualEarth();
       //....other code
    }
}

我可以使用依赖项注入框架在运行时按类型参数创建合适的MapEngine实现吗?

您的示例正是有条件实例化对象的正确模式。在需要创建实例的任何位置,在构造函数中接受
IMapFactory


DI框架最应该做的就是分发
IMapFactory
实例。

DI框架可以创建VirtualEarth、MapXtreme或。。通过使用类型参数,如果是的话,你能给我一个如何配置它来实现这一点的例子吗?正如我所说,你所拥有的是设置条件实例化的正确方法。您不需要DI框架来创建VirtualEarth和MapXtreme实例,工厂会这样做。DI框架创建工厂的实例。除非这些类有复杂的构造函数,并且为了简单起见您将它们省略了。是这样吗?