C# 注入非灵长类类型而不将它们包装在StructureMap的接口中

C# 注入非灵长类类型而不将它们包装在StructureMap的接口中,c#,inversion-of-control,structuremap,C#,Inversion Of Control,Structuremap,我有一个简单的SM注册表,在这里配置我的所有IDynamicValue实例。我有一些非灵长类的构造函数参数(在我的例子中是DateTime和T的谓词)。有没有一种方法可以注入这些代码,而不必将它们封装在带有接口的类中(这样它们就可以自动连接)。以下代码片段显示了我想要完成的任务: ForRequestedType<IDynamicValue>().AddInstances(x => { x.OfConcreteType

我有一个简单的SM注册表,在这里配置我的所有IDynamicValue实例。我有一些非灵长类的构造函数参数(在我的例子中是DateTime和T的谓词)。有没有一种方法可以注入这些代码,而不必将它们封装在带有接口的类中(这样它们就可以自动连接)。以下代码片段显示了我想要完成的任务:

ForRequestedType<IDynamicValue>().AddInstances(x =>
             {
                 x.OfConcreteType<DateTimeGenerator>().WithName("DateTime")
                     .WithCtorArg("keyName").EqualTo("DateTime")
                     .WithCtorArg("startDate").EqualTo(DateTime.Now.AddMonths(-1))
                     .WithCtorArg("minuteIntervalDelta").EqualTo(60);

             });
ForRequestedType()。附加说明(x=>
{
x、 OfConcreteType()。带名称(“日期时间”)
.WithTorArg(“关键字”).EqualTo(“日期时间”)
.WithTorArg(“startDate”).EqualTo(DateTime.Now.AddMonths(-1))
.WithTorArg(“分钟间隔增量”)。等于(60);
});
该示例运行但失败,出现以下异常:

StructureMap异常代码:202 没有为PluginFamily System.DateTime定义默认实例

谢谢, Nic

编辑:


Freddy Rios的解决方案非常适合我的需要。如果我自动连接一些构造函数参数(因此无法使用ConstructedBy())

如果您已经将所有参数传递给构造函数,则可以使用ConstructedBy来代替:

x.ConstructedBy(y => new DateTimeGenerator(
          "DateTime", DateTime.Now.AddMonths(-1), 60
         )
   ).WithName("DateTime");

如果已将所有参数传递给构造函数,则可以改用ConstructedBy:

x.ConstructedBy(y => new DateTimeGenerator(
          "DateTime", DateTime.Now.AddMonths(-1), 60
         )
   ).WithName("DateTime");