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);
可以在此处找到更详细的说明:标题不应包含标签:请检查此项: