将可选参数传递给autofac

时间:2012-11-07 17:02:21

标签: c# autofac

我正在尝试使用Autofac并注册下面的类,它接收一个参数作为可选参数(或者更确切地说是null)。 我的课程是:

class BaseSpanRecord : ISpanRecord
{
    public BaseSpanRecord(RecordType recordType, List<SpanRecordAttribute> properties)
    {
        RecordType = recordType;
        Properties = properties;
    }
}

此处 RecordType 是一个枚举,而 SpanRecordAttribute 是一个只有我不想创建任何接口的属性的类。

在构造函数中 RecordType 属性是接口 ISpanRecord 的两个公共属性 这个类可以通过以下方式在程序的不同位置实例化:

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, null);

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, recordAttributeList);

我应该如何尝试在Autofac容器中注册它,以便它可以处理上述两种情况? 或者我是否应该以 BaseSpanRecord 类的方式更改某些内容以使其注册更容易?

1 个答案:

答案 0 :(得分:2)

使用TypeParameter解析实例时,只要提供类型信息null就可以了。您无需在注册时使用UsingConstructor方法。

直接创建TypedParameter实例:

var recordTypeParam = new TypedParameter(typeof(RecordType), RecordType.Something);
var propertiesParam = new TypedParameter(typeof(List<SpanRecordAttribute>), null);
var record = container.Resolve<ISpanRecord>(recordTypeParam, propertiesParam);

使用TypedParameter.From辅助方法:

var record = container.Resolve<ISpanRecord>(TypedParameter.From(RecordType.Something), TypedParameter.From((List<SpanRecordAttribute>)null));

请注意,null已转换为List<SpanRecordAttribute>以允许使用辅助方法进行类型推断。