2

私はasp.net mvc3を学んでいます。私がオンラインで見つけた 1 つの例は、IOC の使用方法を教えてくれるものです。

            public class HomeController : Controller
            {
                private IHelloService _service;
                public HomeController():this(new HelloService())
                {}

                public HomeController(IHelloService service)
                {
                    _service = service;
                }
            }

この例には 2 つのコンストラクターがあります。2つ目は分かります。最初のものはそれが何のためにあるのかを理解していますが、私には余分なコードのように思えます.あなたはそれを必要としません.

誰かが最初のコンストラクターを追加するポイントを教えてください。

                public HomeController():this(new HelloService())
                {}
4

2 に答える 2

4

MVCフレームワークがコントローラーをインスタンス化するとき、デフォルトの(パラメーターのない)コンストラクターを使用します。

デフォルトでは、具体的なIHelloService実装を注入しています。これは、ユーザーがアクションに移動するときに使用されます。

単体テストではIHelloService、デフォルトのコンストラクターを呼び出すのではなく、オーバーロードを使用してモック実装を渡します。

于 2012-05-17T18:55:22.670 に答える
3

これを注入する依存性注入フレームワークを使用しない場合に便利です。このようにして、オブジェクトを手動で注入する必要はありません。オブジェクトはそれを単独で処理します。

もちろん、2番目のコンストラクターは、単体テスト時にカスタムオブジェクトを挿入するのに役立ちます。

通常、これを行う必要があります。

IFoo foo = new Foo();
IBar bar = new Bar(foo);

コンストラクターがデフォルトオブジェクトを作成するとき、これを行うことができます。

IBar bar = new Bar();

次に、BarはFooを作成し、それを自身に注入します。

于 2012-05-17T18:54:47.653 に答える