如果我只有 XML 配置可用,我如何将装饰器模式与 Autofac 一起使用?

How can I use the decorator pattern with Autofac if I only have XML configuration available to me?

我有一个服务的特定实现,我只能通过 Autofac XML 配置文件 (http://autofac.readthedocs.org/en/latest/configuration/xml.html) 注册。

我需要修饰此实现以添加一些新功能,但我似乎找不到实现此目的的方法。

通常,我会在 Autofac 模块中这样做:

    builder.RegisterType<AzureBlobShellSettingsManager>().Named<IShellSettingsManager>("implementation");

    builder.RegisterType<DecoratorShellSettingsManager>().As<IShellSettingsManager>().WithParameter(
                (p, c) => p.ParameterType == typeof(IShellSettingsManager),
                (p, c) => c.ResolveNamed<IShellSettingsManager>("implementation"));

是否可以使用 XML 配置获得相同的结果?如果是,怎么做?

Autofac 配置支持不包括完全通过配置完成此操作所需的深度功能。配置模型从未打算与基于代码的注册功能 100% 等效。

一个可能的解决方法可能是创建一个模块来注册您需要的东西,然后使用配置注册该模块。配置不支持的复杂部分可能是代码,但配置中的简单切换仍然存在。并且模块可以接受参数,所以如果你需要将类型或类似的东西传递给模块,你可以通过类型名称来完成,然后在模块中执行 Type.GetType 将其转换回来。