如何使用StructureMap有条件地提供构造函数参数?

时间:2013-01-11 02:56:10

标签: c# .net ioc-container structuremap

我想基于父类型有条件地为StructureMap提供构造函数参数。 我试图用下面的代码实现这一点。

具体类型ProcessorSettings是TypeOne和TypeTwo的构造函数参数。 ProcessorSettings的构造函数接受一个名为“frequency”的int参数。

当我尝试这个时,我得到一个StructureMap错误 StructureMap异常代码:202 没有为PluginFamily定义默认实例。错误消息中没有更多信息。

x.ForConcreteType<ProcessorSettings>()
    .Configure.Ctor<int>("frequency")
    .Is(condition => condition.Conditional(y =>
    {
        y.If(t => t.ParentType == typeof(TypeOne))
            .ThenIt.Is.IsThis(intVal1);

        y.If(t => t.ParentType == typeof(TypeTwo))
            .ThenIt.Is.IsThis(intVal2);
    }));

1 个答案:

答案 0 :(得分:1)

尝试使用命名实例而不是条件实例。如果您有许多变体,可以创建Convention以减少重复。

x.For<ProcessorSettings>().Add<ProcessorSettings>().Ctor<int>("frequency")
    .Is(intVal1).Named("ProcessorSetting1");
x.For<ProcessorSettings>().Add<ProcessorSettings>().Ctor<int>("frequency")
    .Is(intVal2).Named("ProcessorSetting2");
x.For<IType>().Add<TypeOne>().Ctor<ProcessorSettings>()
    .Named("ProcessorSetting1");
x.For<IType>().Add<TypeTwo>().Ctor<ProcessorSettings>()
    .Named("ProcessorSetting2");
相关问题