2017-01-09 6 views
3

auto facでAsSelf()とは何ですか? 私はautofacに慣れていませんが、AsSelfとは何ですか?また、以下の2つの違いは何ですか?AsSelfはオートファックで何をしますか?

builder.RegisterType()。AsSelf()。As(); builder.RegisterType()。As();

ありがとうございました!

答えて

9

通常、クラスに実装ではなくインターフェイスを注入したいと思うでしょう。

しかし、あなたが持っていると仮定してみましょう:builder.RegisterType<FooService>()の登録

interface IFooService { } 

class FooService { } 

あなたはFooServiceを注入することができますが、あなたはIFooServiceを注入することはできません、でもFooServiceはそれを実装しています。これはbuilder.RegisterType<FooService>().AsSelf()に相当します。 builder.RegisterType<FooService>().As<IFooService>()を登録

は、あなたはもうFooServiceIFooServiceを注入ではなく、することができます - .As<T>を使用して上に示した「タイプ別」デフォルトの登録「を上書きします」。

タイプとインターフェイスの両方でサービスを注入する可能性がある場合は、前の登録にAsSelf()を追加する必要があります。builder.RegisterType<FooService>().As<IFooService>().AsSelf()

サービスが多くのインターフェイスを実装していて、それらをすべて登録したい場合は、builder.RegisterType<SomeType>().AsImplementedInterfaces()を使用できます。これにより、実装するインターフェイスによってサービスを解決できます。

Autofacは自動的に処理しないため、登録を明示する必要があります(場合によっては、一部のインターフェイスを登録したくない場合があるため)。

これも、here in Autofac documentation