0
  1. 型付きファクトリがあります:

    public interface IDataProviderFactory
    {
        IDataProvider Create(ConfigurationItem configurationItem);
        void Release(IDataProvider dataProvider);
    }
    
  2. IDataProvider にはいくつかの実装があります

  3. 一部の実装は ICalculator に依存しています
  4. ICalculator にはいくつかの実装があります。
  5. 構成クラスがあります:

    public class ConfigurationItem
    {
         public CalculatorsEnum CalculatorsEnum { get; set; }
         public DataPriversEnum DataPriversEnum { get; set; }        
    }
    

ファクトリの Create メソッドを呼び出そうとすると、Windsor は IDataProvider の依存関係 (ICalculator) を解決しようとします。

ここでは、使用する ICalculator のバージョンを理解できるように、コンテナーで元のパラメーターからの情報を使用する必要があります。

アップデート

詳細を追加したいと思います:

  1. IDataProviderFactory を使用するクラスがあります。IDataProvider のライフサイクルを制御し、ファクトリを使用して時々作成および破棄します。したがって、このレベルでは、IDataProvider の実装については何も知りたくありません。電卓のない DataProvider が存在する可能性があります。
  2. 最初は、IDataProviderFactory の独自の実装があり、そこで ICalculator を解決して DataProvider に挿入できました。しかし、リサイクルに関しては、DataProvider を破棄していましたが、Windsor で何かを手動で解決する場合、明示的に解放する必要がある場合、破棄するだけでは十分ではないようです。

可能な解決策:

  • これらすべてを手動で行うことはできますが、ほとんどの場合、キャスティングなどで美しさを損なうことになります。
  • 必要に応じて、Calculator の型付きファクトリを DataProviders 実装に挿入し、そこで Calculator のライフサイクルを制御できます。例: 私は自分のファクトリで DataProvider を作成しましたが、それは必要ありません。リリースすると、コンテナは DataProvider の破棄を呼び出し、そこで独自のファクトリで Calculator をリリースします。
  • ウィンザー方式?
4

1 に答える 1