首页 > 解决方案 > 如何通过 StructureMap 中的 ExplicitArguments 类型选择构造函数?

问题描述

我有一个Foo带有 3 个构造函数的类,每个构造函数都有 2 个参数。

public class Foo
{
    public string Location;

    public Foo(IContainer container, DefaultData data)
    {
        Location = "DefaultData";
    }

    public Foo(IContainer container, DbData data)
    {
        Location = "DbData";
    }

    public Foo(IContainer container, NetworkData data)
    {
        Location = "NetworkData";
    }
}

public class DefaultData
{
}

public class DbData
{
}

public class NetworkData
{
}

现在如果我想获得一个实例

var container = new Container();

ExplicitArguments args = new ExplicitArguments();
args.Set(new NetworkData(new decimal(1.3D), 'f'));

var instance = container.GetInstance<Foo>(args);

我总是遇到以下异常:

Unable to create a build plan for concrete type TestConsole.DefaultData
new DefaultData(String s, Int32 i)
  ┣ String s = Required primitive dependency is not explicitly defined
  ┗ Int32 i = Required primitive dependency is not explicitly defined
1.) Attempting to create a BuildPlan for Instance of TestConsole.DefaultData -- TestConsole.DefaultData
2.) new Foo(*Default of IContainer*, *Default of DefaultData*)
3.) TestConsole.Foo
4.) Instance of TestConsole.Foo
5.) Container.GetInstance<TestConsole.Foo>({TestConsole.NetworkData=TestConsole.NetworkData})

我还尝试使用自定义IConstructor选择器解决我的问题,但我没有收到提供的参数(类型),并且无法决定我应该使用哪个构造函数。


我想实现构造函数由传递的ExplicitArguments.

标签: c#structuremap

解决方案


推荐阅读