【问题标题】:Get Named instance of dependency获取依赖的命名实例
【发布时间】:2015-07-12 09:09:14
【问题描述】:

我有以下代码:

        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());

IEngineICar具体实现所使用的接口,被注入到构造函数中。

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

【问题讨论】:

标签: c# structuremap


【解决方案1】:

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

解决方案 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/

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多