3

asp.netで単純なMVCアプリケーションを構築しています。依存性逆転の原則に従いたいのですが、正しく行っているかどうかわかりません。

私は現在、認証システムに取り組んでいます。内部でAuthenticatorサービスを使用するAccountControllerがあります。オーセンティケーターサービスは、コンストラクターインジェクションによってコントローラーにインジェクトされます。

public class AccountController : Controller
{
    private IAuthenticator _authenticator;

    public AccountController(IAuthenticator authenticator)
    {
        _authenticator = authenticator;
    }

    //
    // POST: /Account/Login

    [HttpPost]
    public ActionResult Login(LoginModel model, string redirectToUrl = null)
    {

     ...

    }

ファイルの構造は次のとおりです。

ここに画像の説明を入力してください

しかし、コントローラーとその依存関係の間の良識を完全に逆転させたい場合は、認証サービスのインターフェースをコントローラーの隣に移動する必要があると考えていました。このようなもの:

ここに画像の説明を入力してください

このようにして、クライアント(コントローラー)とサービスの抽象化は同じ名前空間に存在します。したがって、サービスのインターフェースの変更はクライアントから行われ、サービスの実装に伝達されます。以前の方法の代わりに、サービスで発生する変更がクライアントに伝播されました。依存関係は反転しています-サービスはクライアントに依存しています。

クライアントとサービスが異なるアセンブリにある場合にこれの利点を確認できますが、同じアセンブリに関してこれを行う必要があるかどうかはわかりません。

私がこれを正しく行っているかどうか、そして最初のファイル構造を使用するか、2番目のファイル構造を使用するかを教えてください。

ありがとう、Asier

4

1 に答える 1

10

コードファイルの場所にはほとんど違いはありません。これはソースコードの整理の問題であり、制御の反転とは関係ありません。

重要なのは、依存関係をコントローラーに注入しているということです。

于 2012-12-27T16:38:45.927 に答える