12

このシナリオを考えてみましょう:

public class B {};

public class C
{
     public C(B b){}
}

C を Autofac コンテナーから解決するには、B と C の両方をコンテナーに登録する必要があります。しかし、今日はUnityを使用しました。B をコンテナーに登録するだけでよいようで、C は解決できます。

Autofac は Unity のようにできないのでしょうか?

4

1 に答える 1

21

すぐに使用できるAutofacを使用すると、Register...メソッドを直接使用するか、を使用して一括して、使用するすべてのタイプがコンテナーに登録されることが期待されますRegisterAssemblyTypes。しかし、他のオプションもあります。すべてを解決することについてのニコラスの記事を見てください。そうです、AutofacはUnityが行うことを実行できますが、それを有効にする必要があります。

更新:実際には、「何でも解決」機能が組み込まれており、次のことができます。

        var cb = new ContainerBuilder();
        cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
        return cb.Build();

を使用すると、AnyConcreteTypeNotAlreadyRegisteredSource実際に両方Cを解決Bでき、それらを登録しなくてもかまいません。

によって解決されるサービスの存続期間は「依存関係スコープごと」AnyConcreteTypeNotAlreadyRegisteredSourceになることに注意してください。

注: Autofacディスカッショングループでのこのトピックは関連しています。

于 2010-08-05T11:16:22.067 に答える