私は、次のインタフェースを介して、私のクラスの一部にConfigurationProviderを注入するユニティフレームワークを使用しています:Unity DIでコマンドライン引数を使用するための戦略?
interface IConfigurationProvider<T>{
T GetConfiguration();
}
その後、Unityでの私のブートストラップでは、
container.RegisterType(typeof (IConfigurationProvider<DongleConfiguration>),
typeof (DongleConfigurationProvider));
これは良いされています今までの戦略&は、私がさまざまな実装のために異なる設定プロバイダを定義できるようにしました&テスト。今、私はCTORにargs
パラメータに沿って渡すために私を必要とする、プロバイダのいずれかが、configオブジェクトを設定するには、コマンドライン引数を使用したい:
class ProblematicConfigurationProvider : IConfigurationProvider<ProblematicConfiguration> {
...
public ProblematicConfigurationProvider(string[] args) { ... }
...
}
私は私が使用できることを読みましたRootObject
を解決した後、私はラインの下の依存関係を解決するために、「すべての道を」DIを使用し、容器に頼っています、しかし
var configObj = container.Resolve<IConfigurationProvider<ProblematicConfiguration>>(new ParameterOverride("args", args));
をか私のトップレベルのクラスが何であれ:ParameterOverride
は、次のようなオプションのctorの引数を供給するための。私の質問は、どうすれば私の依存グラフのどこかに深く埋もれてしまった場合に、今解決したconfigObj
オブジェクトをどうすれば使えるのですか? Resolve
の別の呼び出しで解決されたオブジェクトを使用するにはどうすればよいですか?それはParameterOverride
の同様の使い方ですか?パラメータのオーバーライドを設定する方法はありますか& Unityは実際にconfigObj
をインスタンス化せずにそれを使用していますか?
このようにはるかに良い感じです。ありがとう! –