私はIOCのコンセプトに非常に新しいので、さまざまな状況で異なるクラスを解決するのに役立ちます。あなたの呼び出し側クラスはInterfaceとInterfaceとのやりとりで、どの実装があなたに与えるのかを決めるだけで、オブジェクトを新しくすることができます。今IOCとバインディングを理解しようとしています
、私はこれらのプロジェクトに非常に多くの場合、このパターンを参照してください:
private readonly IEmailService emailService;
private readonly ITemplateRenderer templateRenderer;
private readonly IHtmlToTextTransformer htmlToTextTransformer;
public TemplateEmailService(IEmailService emailService,
ITemplateRenderer templateRenderer,
IHtmlToTextTransformer htmlToTextTransformer)
{
this.emailService = emailService;
this.htmlToTextTransformer = htmlToTextTransformer;
this.templateRenderer = templateRenderer;
}
私はこのことができますことを理解し、私は私の質問は、それに基づいているので、理解が間違っていた場合
私を修正してくださいこれらのクラスのすべての実装を新しくすることなく使用しています。また、実装する実装を決める必要はありません。あなたのIOCがあなたのために決定します。
しかし、このようなコードでは、IOCの設定ファイルには触れません。そしてもう一度私はgitを2日間だけ使っていますが、私が読んだチュートリアルから、私は自分の "Resolve IParent to Child"クラスを構成することを期待していました。しかし、それは私のようなことをすることなく動作します。これらのインターフェースの実装は1つしかないので、それはありますか?そして、もし私が複数の実装を持っていて、次に私は明示的に解決を構成しなければならないでしょうか?
特定のインターフェイスの実装が1つしかないときは、IOCは独自のものを考え出します(少なくとも構造マップではそうしています)。明示的な設定は、複数の実装がある場合にのみ行う必要があります。 – TeaLeave
一部のIoCおよびDIフレームワークでは、「構成上の規約」パラダイムも使用されます。したがって、もしあなたがIFooを実装している他のクラスを持っていても、このインタフェースを実装するIFooインタフェースとFooクラスがあれば、フレームワークはIFooをFooに解決します。実際にはもっと複雑になることがありますが、これが主なアイデアです。私が知っているように、それはもともとRuby On Railsで考案されており、構造マップもそれをサポートしています(http:// codebetter。com/jeremymiller/2009/01/20/create-your-own-auto-registration-convention-with-structuremap /) – Nikolay