このシナリオを考えてみましょう:
public class B {};
public class C
{
public C(B b){}
}
C を Autofac コンテナーから解決するには、B と C の両方をコンテナーに登録する必要があります。しかし、今日はUnityを使用しました。B をコンテナーに登録するだけでよいようで、C は解決できます。
Autofac は Unity のようにできないのでしょうか?
すぐに使用できるAutofacを使用すると、Register...
メソッドを直接使用するか、を使用して一括して、使用するすべてのタイプがコンテナーに登録されることが期待されますRegisterAssemblyTypes
。しかし、他のオプションもあります。すべてを解決することについてのニコラスの記事を見てください。そうです、AutofacはUnityが行うことを実行できますが、それを有効にする必要があります。
更新:実際には、「何でも解決」機能が組み込まれており、次のことができます。
var cb = new ContainerBuilder();
cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
return cb.Build();
を使用すると、AnyConcreteTypeNotAlreadyRegisteredSource
実際に両方C
を解決B
でき、それらを登録しなくてもかまいません。
によって解決されるサービスの存続期間は「依存関係スコープごと」AnyConcreteTypeNotAlreadyRegisteredSource
になることに注意してください。
注: Autofacディスカッショングループでのこのトピックは関連しています。