1

StructureMap を使用する .NET アプリケーションに含めるいくつかの機能トグルがあります。機能トグルを 2 つの目的で登録したいと考えています。

  • 診断ページにすべて の現在の状態を表示します。IFeatures
  • IFeature特定の実装に依存するサービスのコンストラクターで特定のインスタンスを使用する

これが私のセットアップです。私が疑問に思っているのは、これを正しく行っているかということです。私がそれを行うことができるより良い方法はありますか?

class HotNewFeature : IFeature { ... }

class ServiceThatUsesFeature 
{
    public ServiceThatUsesFeature(HotNewFeature hotNewFeature) { ... }
}

// Type registry setup
For<HotNewFeature>().Singleton().Use<HotNewFeature>();
For<IFeature>().Singleton().Add(c => c.GetInstance<HotNewFeature>);
For<ServiceThatUsesFeature>().Singleton().Use<ServiceThatUsesFeature>());

// Get all instances on the diagnostics page:
IEnumerable<IFeature> features = ServiceLocator.Current.GetAllInstances<IFeature>();

featuresこの場合、診断ページにはIEnumerable、 のインスタンスである単一の要素を持つ が含まれることが予想されますHotNewFeature

4

1 に答える 1

1

この機能を使用して、ScanIFeature を実装するすべての型を登録します。これで、[診断] ページにリストを表示するという最初のニーズが満たされます。

サービスに特定の実装が必要な場合は、コンストラクターでHotNewFeatureインターフェイス ( ) ではなく、必要な特定の型 ( ) を宣言する必要があります。IFeatureあなたの例ではこれを正しく行っています。その時点で、StructureMap でこれ以上何もする必要はありません。StructureMap から要求ServiceThatUsersFeatureし、それが具象クラス ( ) に依存している場合HotNewFeature、StructureMap はその具象クラスをインスタンス化する方法を認識します。

于 2013-01-10T18:14:47.773 に答える