我正在尝试在 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的对象实例
所以看起来我的存储库实际上没有被注入,现在我很困惑,任何想法可能是什么问题?