MVC2プロジェクトをMVC3にアップグレードし、NuGetライブラリパッケージリファレンスを使用してninjectをインストールしました。これによりappstartクラスが作成され、次のコードを使用してIMembershipServiceクラスを挿入しました。
public static void RegisterServices(IKernel kernel) {
kernel.Bind<IMembershipService>().To<AccountMembershipService>();
}
これは、たとえば私のHomeControllerでうまく機能します。
public class HomeController : Controller
{
public IMembershipService MembershipService { get; set; }
public HomeController() : this(null) { }
public HomeController(IMembershipService service)
{
MembershipService = service;
}
ただし、私はBaseControllerを使用しています。基本クラスのほぼ同じコードは機能しなくなりました。
public class BaseController : Controller
{
public IMembershipService MembershipService { get; set; }
public UserService UserService { get; set; }
public BaseController() : this(null, null) { }
public BaseController(IMembershipService service, UserService userService)
{
MembershipService = service;
UserService = userService ?? new UserService();
}
ベースコントローラーのコンストラクターに割り込むと、サービスはNULLになります。私はIOCにNinjectを使用したことがないので、おそらく答えは明らかですが、なぜそれが私のAccountMembershipControllerを基本クラスに注入しないのでしょうか。何が違うのかわかりませんが、継承の余分なレベルがどういうわけかNinjectを台無しにしている可能性があることはわかっています。