0

これを行うために、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のオブジェクトのインスタンスに設定されていません

私のリポジトリは実際には注入されていないように見えますが、今ではかなり困惑しています。問題は何でしょうか?

4

0 に答える 0