【问题标题】:How to conditionally supply constructor arguments with StructureMap?如何使用 StructureMap 有条件地提供构造函数参数?
【发布时间】:2013-01-11 02:56:10
【问题描述】:

我想根据父类型有条件地为 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);
    }));

【问题讨论】:

    标签: c# .net ioc-container structuremap


    【解决方案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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2011-07-18
      • 2011-10-27
      • 1970-01-01
      相关资源
      最近更新 更多