3

登録には次のコードを使用しています。

builder.RegisterType<QCatVCardParser>().Named<IQCatParser>(".VCF");              
builder.RegisterType<QCatVCardParser>().Named<IQCatParser>(".VCARD");            
builder.RegisterType<QCatOutlookMessageParser>().Named<IQCatParser>(".MSG");
builder.RegisterType<QCatMimeMessageParser>().Named<IQCatParser>(".EML");
builder.RegisterType<QCatCalendarParser>().Named<IQCatParser>(".ICS");
container = builder.Build();

クラス参照を取得するには、次のコードを使用しています。

var r = container
    .ResolveNamed<IQCatParser>(Path.GetExtension(fileName).ToUpperInvariant());

ここで私の質問は、サポートされていないファイル拡張子が来たら.DOCとしましょう。登録されたクラスの1つにあるコンポーネントで、または最初に登録されたクラスで解決したいと思います。

AutoFacでこれを行うことは可能ですか?

4

1 に答える 1

1

これは Autofac で行うことができます。IRegistrationSource必要に応じて、デフォルトの登録を提供できるを作成する必要があります。たとえば、RegistrationsFor設定クラスを提供するソースのコードは次のとおりです。

var typedService = service as IServiceWithType;
if (typedService != null && typedService.ServiceType.IsClass && typeof(ISettings).IsAssignableFrom(typedService.ServiceType))
{
    yield return RegistrationBuilder.ForDelegate((c, p) => c.Resolve<ISettingsReader>().Load(typedService.ServiceType))
                .As(typedService.ServiceType)
                .CreateRegistration();
}

次に、モジュール内で、または Autofac ビルダーを直接使用して、呼び出しRegisterSourceて新しい登録ソースを接続します。

于 2012-07-03T12:07:53.460 に答える