获取依赖项的命名实例
本文关键字:实例 依赖 获取 | 更新日期: 2023-09-27 18:02:21
我有以下代码:
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());
IEngine
是ICar
具体实现使用的接口,被注入到构造函数中。
现在默认情况下StructureMap将使用V12Engine
,但我希望它使用V8Engine
代替,我怎么能实现这种情况?
我已经找到了这个问题的解决方案,我在下面给出它,以防其他人需要它:
解决方案1:
var car = container.With(container.GetInstance<IEngine>("V8")).GetInstance<ICar>();
解决方案2:
var engine = new V8Engine();
var car = container.With<IEngine>(engine).GetInstance<ICar>();
解决方案3:(如果你有很多依赖)
var engine = new V8Engine();
var eArgs = new ExplicitArguments();
eArgs.Set<IEngine>(engine);
var car = container.GetInstance<ICar>(eArgs);
更详细的说明可以在这里找到:http://structuremap.github.io/resolving/passing-arguments-at-runtime/