auto facでAsSelf()とは何ですか? 私はautofacに慣れていませんが、AsSelfとは何ですか?また、以下の2つの違いは何ですか?AsSelfはオートファックで何をしますか?
builder.RegisterType()。AsSelf()。As(); builder.RegisterType()。As();
ありがとうございました!
auto facでAsSelf()とは何ですか? 私はautofacに慣れていませんが、AsSelfとは何ですか?また、以下の2つの違いは何ですか?AsSelfはオートファックで何をしますか?
builder.RegisterType()。AsSelf()。As(); builder.RegisterType()。As();
ありがとうございました!
通常、クラスに実装ではなくインターフェイスを注入したいと思うでしょう。
しかし、あなたが持っていると仮定してみましょう:builder.RegisterType<FooService>()
の登録
interface IFooService { }
class FooService { }
あなたはFooService
を注入することができますが、あなたはIFooService
を注入することはできません、でもFooService
はそれを実装しています。これはbuilder.RegisterType<FooService>().AsSelf()
に相当します。 builder.RegisterType<FooService>().As<IFooService>()
を登録
は、あなたはもうFooService
IFooService
を注入ではなく、することができます - .As<T>
を使用して上に示した「タイプ別」デフォルトの登録「を上書きします」。
タイプとインターフェイスの両方でサービスを注入する可能性がある場合は、前の登録にAsSelf()
を追加する必要があります。builder.RegisterType<FooService>().As<IFooService>().AsSelf()
。
サービスが多くのインターフェイスを実装していて、それらをすべて登録したい場合は、builder.RegisterType<SomeType>().AsImplementedInterfaces()
を使用できます。これにより、実装するインターフェイスによってサービスを解決できます。
Autofacは自動的に処理しないため、登録を明示する必要があります(場合によっては、一部のインターフェイスを登録したくない場合があるため)。