連鎖した依存関係のパラメータを上書きする必要があります。私のオーバーライドされたパラメータは、第1および第2のインスタンス化されたクラスに渡されなければなりません。オーバーライドされたパラメータを使ったUnity連鎖依存関係
私のクライアントクラスは、env
というパラメータ(起動時にはわかりません)を持つIA
のインスタンスが必要です。そして、IA
のコンストラクタは、同じカスタムのenv
パラメータを持つIB
のインスタンスを必要とします。ここ
class A : IA
{
IB _b;
AppEnv _env;
public A(IB b, AppEnv env)
{
_b = b;
_env = env;
}
void DoStuff();
}
class B : IB
{
AppEnv _env;
public A(AppEnv env)
{
_env = env;
}
void DoStuff();
}
そして、私のクライアントのコードは次のとおりです:だからここ
は私の二つのクラスのコードです
var env = new... // "good" env, with runtime values
var a = container.Resolve<IA>(new ParameterOverride("env", env));
IA
のインスタンスが「良い」env
パラメータを持っています。しかし、このパラメータをIB
のインスタンスに渡すにはどうすればよいですか?
マイUnityコンフィギュレーションは、次のようになります。あなたは、継承を変更したくない場合は
var defaultEnv = new ... // default env object
container.RegisterType<IB, B>(new InjectionConstructor(defaultEnv));
container.RegisterType<IA, A>(new InjectionConstructor(defaultEnv));
私はAppEnvをUnityでオーバーライドする代わりに継承するBaseクラスを提案します。 – JoshYates1980
'b'をコード内で取得しているのと同じ方法で取得してから、両方のパラメータを上書きするだけでいいのですか?私は統一を使用していないが、ちょうどそれがうまくいくように見えるコードを見てから... – Chris