0

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

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

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

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

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, null);

或者

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, recordAttributeList);

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

4

1 回答 1

2

使用 aTypeParameter来解析实例时只要提供类型信息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>为允许使用辅助方法进行类型推断。

于 2012-11-08T07:26:45.450 回答