I have a specific implementation of a service that I can only register via an Autofac XML configuration file (http://autofac.readthedocs.org/en/latest/configuration/xml.html).
I need to decorate this implementation in order to add some new functionality, but I can't seem to find a way to achieve this.
Normally, I'd do this in an Autofac module like so:
builder.RegisterType<AzureBlobShellSettingsManager>().Named<IShellSettingsManager>("implementation");
builder.RegisterType<DecoratorShellSettingsManager>().As<IShellSettingsManager>().WithParameter(
(p, c) => p.ParameterType == typeof(IShellSettingsManager),
(p, c) => c.ResolveNamed<IShellSettingsManager>("implementation"));
Is it possible to get the same result with an XML configuration? And if so, how?
答案 0 :(得分:1)
Autofac配置支持不包括完全通过配置完成此操作所需的功能深度。配置模型从未打算与基于代码的注册100%功能等效。
一个可能的解决方法可能是创建一个模块来注册您需要的东西,然后使用配置注册模块。配置不支持的复杂部分可能是代码,但配置中的简单切换仍然存在。模块可以接受参数,因此如果您需要将类型或类似的类型传递给模块,您可以按类型名称进行操作,并在模块中执行Type.GetType
以将其转换回来。