我正在尝试使用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 类的方式更改某些内容以使其注册更容易?
答案 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>
以允许使用辅助方法进行类型推断。