0

我正在尝试在 MVC4 中创建我自己的自定义 ViewEngine 为了做到这一点,我想使用 ninject 注入一个存储库。

在阅读了有关 stackoverflow 的几篇文章和各种博客后,我想出了以下代码:

新视图引擎.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>();
    }
}

全球.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