型付きファクトリがあります:
public interface IDataProviderFactory { IDataProvider Create(ConfigurationItem configurationItem); void Release(IDataProvider dataProvider); }
IDataProvider にはいくつかの実装があります
- 一部の実装は ICalculator に依存しています
- ICalculator にはいくつかの実装があります。
構成クラスがあります:
public class ConfigurationItem { public CalculatorsEnum CalculatorsEnum { get; set; } public DataPriversEnum DataPriversEnum { get; set; } }
ファクトリの Create メソッドを呼び出そうとすると、Windsor は IDataProvider の依存関係 (ICalculator) を解決しようとします。
ここでは、使用する ICalculator のバージョンを理解できるように、コンテナーで元のパラメーターからの情報を使用する必要があります。
アップデート
詳細を追加したいと思います:
- IDataProviderFactory を使用するクラスがあります。IDataProvider のライフサイクルを制御し、ファクトリを使用して時々作成および破棄します。したがって、このレベルでは、IDataProvider の実装については何も知りたくありません。電卓のない DataProvider が存在する可能性があります。
- 最初は、IDataProviderFactory の独自の実装があり、そこで ICalculator を解決して DataProvider に挿入できました。しかし、リサイクルに関しては、DataProvider を破棄していましたが、Windsor で何かを手動で解決する場合、明示的に解放する必要がある場合、破棄するだけでは十分ではないようです。
可能な解決策:
- これらすべてを手動で行うことはできますが、ほとんどの場合、キャスティングなどで美しさを損なうことになります。
- 必要に応じて、Calculator の型付きファクトリを DataProviders 実装に挿入し、そこで Calculator のライフサイクルを制御できます。例: 私は自分のファクトリで DataProvider を作成しましたが、それは必要ありません。リリースすると、コンテナは DataProvider の破棄を呼び出し、そこで独自のファクトリで Calculator をリリースします。
- ウィンザー方式?