これを行うために、MVC4 で独自のカスタム ViewEngine を作成しようとしています。ninject を使用してリポジトリを挿入したいと考えています。
stackoverflow とさまざまなブログに関するいくつかの投稿を読んだ後、次のコードを思いつきました。
NewViewEngine.cs
public class NewViewEngine: RazorViewEngine
{
[Inject]
private static IThemeRepository mThemeRepository { get; set; }
....
}
NinjectControllerFactory
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
ninjectKernel = new StandardKernel(new NinjectSettings { UseReflectionBasedInjection = true });
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
ninjectKernel.Bind<IThemeRepository>().To<EFThemeRepository>();
}
}
Global.asax
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new ThemeViewEngine("web"));
}
ただし、これを実行しようとすると、次のエラーが発生します。
オブジェクト参照が mThemeRepositoryのオブジェクトのインスタンスに設定されていません
私のリポジトリは実際には注入されていないように見えますが、今ではかなり困惑しています。問題は何でしょうか?