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,我想用其中一个注册类中的一个组件或第一个注册类来解决它。

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 回答