Autofac での XML 構成は、XML 形式での Autofac の柔軟性の完全な実装ではなく、80% のユース ケースを対象としています。代わりに Autofac は、構成にモジュール メカニズムを使用することを推奨しています。モジュールを XML 構成と組み合わせると、目的を達成するための非常に強力な方法となり、必要に応じて依存関係を切り替える柔軟性も備えています。
まず、必要な登録を行う Autofac モジュールを作成します。
public class EmailModule
{
protected override void Load(ContainerBuilder builder)
{
// Register a named logging service so we can locate
// this specific one later.
builder.RegisterType<LoggingService>()
.Named<ILoggingService>("emailLogger");
// Create a ResolvedParameter we can use to force resolution
// of the constructor parameter to the named logger type.
var loggingServiceParameter = new ResolvedParameter(
(pi, ctx) => pi.Name == "loggingService",
(pi, ctx) => ctx.ResolveNamed<ILoggingService>("emailLogger"));
// Add the ResolvedParameter to the type registration so it
// knows to use it when resolving.
builder.RegisterType<EmailService>()
.As<IEmailService>()
.WithParameter(loggingServiceParameter);
}
}
非常に具体的な解決策が必要なため、登録が少し複雑であることに注意してください。
XML 構成で、そのモジュールを登録します。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="autofac"
type="Autofac.Configuration.SectionHandler, Autofac.Configuration"/>
</configSections>
<autofac>
<modules>
<module type="EmailModule, MyAssembly" />
</modules>
</autofac>
</configuration>
構成を切り替えたい場合は、特定のコンポーネント レジストリをいじるのではなく、別のモジュールを登録します。
コードの免責事項: 私は記憶から構文を書いていますが、私はコンパイラではありません。モジュールの複雑さを分離してから、モジュールを登録します。