将可选参数传递给autofac
我正在尝试使用Autofac并注册下面的类,它接收一个参数作为可选参数(或者更确切地说是null)。 我的课程是:
class BaseSpanRecord : ISpanRecord { public BaseSpanRecord(RecordType recordType, List properties) { RecordType = recordType; Properties = properties; } }
这里RecordType是一个枚举,而SpanRecordAttribute是一个只有我不想创建任何接口的属性的类。
在构造函数中, RecordType和Properties是接口ISpanRecord的两个公共属性。这个类可以通过以下方式在程序的不同位置实例化:
ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, null);
要么
ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, recordAttributeList);
我应该如何尝试在Autofac容器中注册它,以便它可以处理上述两种情况? 或者我应该改变BaseSpanRecord类的编写方式以使其注册更容易?
当使用TypeParameter
来解析实例时,只要提供类型信息, null
应该没问题。 您不应该在注册时使用UsingConstructor
方法。
直接创建TypedParameter实例:
var recordTypeParam = new TypedParameter(typeof(RecordType), RecordType.Something); var propertiesParam = new TypedParameter(typeof(List), null); var record = container.Resolve(recordTypeParam, propertiesParam);
使用TypedParameter.From
帮助器方法:
var record = container.Resolve(TypedParameter.From(RecordType.Something), TypedParameter.From((List)null));
请注意, null
被List
为List
以允许使用helper方法进行类型推断。