0

Ninject.Web.MvcASP.NET MVC 2で(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、コントローラーでアクセスしようとすると、プロパティはnullになります。ただし、代わりにコードをこれに変更すると、次のようになります。

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

その後、正常に動作します。コンストラクターインジェクションが機能しない理由を誰かが知っていますが、プロパティインジェクションは機能していますか?

4

1 に答える 1

1

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

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

それをテストするには、両方のコンストラクターにブレークポイントを設定して、どちらが起動するかを確認できますが、パラメーターのないコンストラクターだと感じています。

于 2010-10-14T01:10:03.880 に答える