12


3

autofacコンテナが解決する前に、すべてのクラスを登録する必要がありますか?

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

public class B {};

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

AutofacコンテナーからCを解決するには、BとCの両方をコンテナーに登録する必要があります。 しかし、今日はhttp://unity.codeplex.com/[Unity]を使用しました。Bをコンテナに登録するだけで、Cを解決できます。

AutofacはUnityのようにはできませんか?

1 Answer


21


すぐに使用可能なAutofacでは、使用するすべてのタイプが、「Register …​」メソッドを直接使用するか、「RegisterAssemblyTypes」を使用して一括してコンテナに登録されることが期待されます。 しかし、他のオプションもあります。http://nblumhardt.com/2010/01/resolve-anything/ [すべての解決に関するニコラスの記事]をご覧ください。 はい、そうです、AutofacはUnityの機能を実行できますが、有効にする必要があります。

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

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

「AnyConcreteTypeNotAlreadyRegisteredSource」を使用すると、「C」と「B」の両方を登録せずに実際に解決できます。

`AnyConcreteTypeNotAlreadyRegisteredSource`によって解決されるサービスの有効期間はhttp://code.google.com/p/autofac/wiki/InstanceScope["perdepend scope"ごと]になることに注意してください。

注: Autofacディスカッショングループでのhttp://groups.google.com/group/autofac/browse_thread/thread/8140a17734bf217d# [このトピック]は関連しています。