C# 获取依赖项的命名实例

C# 获取依赖项的命名实例,c#,structuremap,C#,Structuremap,我有以下代码: var container = new Container(); //car container.Configure( x => x.For<ICar>().Use<Honda>()); //engines container.Configure(x => x.For<IEngine>().Use<V8Engine>

我有以下代码:

        var container = new Container();

        //car
        container.Configure(
            x => x.For<ICar>().Use<Honda>());

        //engines
        container.Configure(x => x.For<IEngine>().Use<V8Engine>().Named("V8"));
        container.Configure(x => x.For<IEngine>().Use<V12Engine>().Named("V12"));

        var car = container.GetInstance<ICar>();

        Console.WriteLine(car.Name());
var container=newcontainer();
//汽车
容器。配置(
x=>x.For().Use());
//引擎
Configure(x=>x.For().Use().Named(“V8”);
Configure(x=>x.For().Use().Named(“V12”);
var car=container.GetInstance();
Console.WriteLine(car.Name());
IEngine
是由
ICar
具体实现使用的接口,并注入构造函数中


现在默认情况下StructureMap将使用
V12Engine
,但我希望它使用
V8Engine
,我如何实现这个场景

我已经找到了这个问题的解决方案,我将在下面给出它,以防其他人需要它:

解决方案1:

        var car = container.With(container.GetInstance<IEngine>("V8")).GetInstance<ICar>();
        var engine = new V8Engine();
        var car = container.With<IEngine>(engine).GetInstance<ICar>();
var car=container.With(container.GetInstance(“V8”)).GetInstance();
解决方案2:

        var car = container.With(container.GetInstance<IEngine>("V8")).GetInstance<ICar>();
        var engine = new V8Engine();
        var car = container.With<IEngine>(engine).GetInstance<ICar>();
var引擎=新的V8Engine();
var car=container.With(engine).GetInstance();
解决方案3:(如果您有很多依赖项)

var引擎=新的V8Engine();
var eArgs=新的明确目标();
耳套(发动机);
var car=container.GetInstance(eArgs);

可以在此处找到更详细的说明:

标题不应包含标签:请检查此项: