0

Autofacを使用して、パラメーターの1つをオプションのパラメーター(またはnull)として受け取る以下のクラスを登録しようとしています。私のクラスは次のとおりです。

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

ここで、 RecordTypeは列挙型であり、SpanRecordAttributeは、インターフェイスを作成したくないプロパティのみを持つクラスです。

コンストラクターでは、 RecordTypePropertiesは、インターフェースISpanRecordの2つのパブリックプロパティです。 このクラスは、プログラムのさまざまな場所で次の方法でインスタンス化できます。

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, null);

また

ISpanRecord spanFileRecord = new BaseSpanRecord(recordType, recordAttributeList);

上記の2つのケースを処理できるように、これをAutofacコンテナーに登録するにはどうすればよいですか?または、登録を簡単にするために、BaseSpanRecordクラスの記述方法を変更する必要がありますか?

4

1 に答える 1

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>

于 2012-11-08T07:26:45.450 に答える