を満たすのはどのこれは私がDIコンテナから何をしたいです:関心のDIコンテナはこの
public class Class
{
public Class(IDependency dependency, string data) { }
}
var obj = di.Resolve<Class>(() => new Class(null, "test"));
ポイント:
- は、コンストラクタで依存関係とデータの両方を解決することができます。
- タイプセーフな構文を使用してコンストラクタパラメータを渡すことができます(正確な構文は異なる場合があります)。はい(Expression.Body as NewExpression)からコンストラクタ引数を取得することで、自分でそれを行うことができますが、コンテナにどのような引数が登録されているかを検出する方法が必要になります。私はそれがIDependencyを解決する方法を知っているので、IoCのは、それを拾うしたい -
もう一つの主要な要件は、私は私のコンポーネントが自動的つまり私は、クラスを登録したくない、ピックアップすることがしたいということです。
また、プロパティーインジェクションは時には便利ですが、これはオプションです。
実際には、タイプセーフ、パラメータ、自動ピックアップのすべての機能を組み合わせることに問題があります... 1つの機能を確認するのは簡単ですが、それらの組み合わせは検証が容易ではありません特定の容器に精通しておらず、その特徴を知っていなければ。したがって、質問。
この種の構文をサポートするコンテナはありません。しかし、多くの(ほぼすべての)コンテナは明示的なコンテナパラメータをサポートしています。 –
"おそらく"は答えではありません...私が知っている限り、私はオブジェクトの[配列の配列を渡すことができますが、明らかに型セーフではありません...私はパラメータの順序を変更することができ、 。 – queen3
クリーナーでは、上記のようにコード内でctorを明示的に使用する必要はありません。あなたが書いたものの代わりに、なぜそうではないのですか? 'var obj = new Class(di.Resolve()、" test ");'? –