3

mvc3 プロジェクト内に「アカウント」エリアがあります。

次のように、登録のみのユーザーに可視性を制限するための AreaRegistration クラスがあります。

public class AccountAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Account";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Account_default",
            "{account}/{controller}/{action}/{id}",
            new {controller = "Dashboard", action = "Index", id = UrlParameter.Optional },
            new {account = new MustBeRegisteredAccount(DEPENDENCIES)},
            new string[] {"Continuum.Web.Areas.Account.Controllers"}
        );
    }
}

では、DEPENDENCIES を解決したり、MustBeRegisteredAccount オブジェクトを作成したりできるように ninject を設定するにはどうすればよいですか?

4

1 に答える 1

1

私は最初にコンストラクタインジェクションを使用してみます(つまり、MVCが内部で登録済みを使用してクラスDependencyResolverのインスタンスを作成するAreaRegistrationかどうかを確認します(それが機能するかどうかについて何らかの方法で見つけましたが、経験的に見つけるための非常に迅速な方法があります: D)。

それができない場合は、MVCランドでDependencyResolver.GetService<MustBeRegisteredAccount>()Service Locator(アンチパターン)の回避策を使用します。(Ninject.MVC3拡張機能は、意図的にグローバルカーネルインスタンスを公開しません。これは、無償の使用を促進するだけだからです)。

http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.htmlを参照してください

于 2012-09-14T04:22:33.803 に答える