質問

私は使用しています Ninject.Web.Mvc (MVC 2バージョン)ASP.NET MVCを使用したアドオン2.これは私の抜粋です Global.asax.cs:

protected override void OnApplicationStarted()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes;
    // RegisterAllControllersIn() is not available in the MVC 2 version of Ninject
}

protected override IKernel CreateKernel()
{
    var kernel = new StandardKernel();
    kernel.Bind<IRepository>().To<NHibernateRepository>();

    return kernel;
}

私もベースを持っています RepositoryController:

public class RepositoryController : Controller
{
    protected IRepository Repository { get; set; }

    public RepositoryController()
    {

    }

    public RepositoryController(IRepository repository)
    {
        Repository = repository;
    }
}

あなたが見ることができるように、それは非常にシンプルなセットアップです RepositoryController のインスタンスで注入されることを期待しています IRepository, 、およびninjectは、の具体的なインスタンスを使用するように構成されています NHibernateRepository. 。ただし、これは機能しません Repository プロパティは、コントローラーでアクセスしようとするたびにヌルです。ただし、代わりにこれにコードを変更した場合:

[Inject]
public IRepository Repository { get; set; }

その後、正常に動作します。コンストラクターの注入が機能しない理由を知っている人はいますか?

役に立ちましたか?

解決

パラメーターのないコンストラクターを削除してみてください。

Ninjectは、間違ったコンストラクターを選択して解決している可能性があります。

それをテストするために、両方のコンストラクターにブレークポイントを置いて、どちらが火が発生するかを確認できますが、パラメーターレスのものであると感じています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top