我使用以下代码进行注册:
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执行此操作?
答案 0 :(得分: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
以挂接新的注册源。