目前,我正在尝试设置依赖项注入,并覆盖授权属性。我试着效仿一些例子,尽管我似乎总是会犯错误。
Global.asax
public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication
{
private class MyModule : NinjectModule
{
public override void Load()
{
this.BindFilter<SageAdminAuthorizationFilter>(FilterScope.Controller, 0);
Bind<IAuthentication>().To<CustomAuthenticationService>();
}
}
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
protected override void OnApplicationStarted()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
protected override IKernel CreateKernel()
{
var modules = new INinjectModule[] {
new MyModule()
};
var kernel = new StandardKernel(modules);
return kernel;
}
}认证过滤器
public class CustomAuthenticationService : IAuthentication
{
public void SignIn(string claimedIdentifier, bool createPersistentCookie)
{
//Write Sign in code here
FormsAuthentication.SetAuthCookie(claimedIdentifier, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
public bool Authorize(HttpContextBase httpContext)
{
//Check here if the user can administer the admin
return false;
}
}
//The Authorization attribute on a controller
public class CustomAdminAuthorizationFilter : IAuthorizationFilter
{
private readonly IAuthentication _authentication;
public SageAdminAuthorizationFilter(IAuthentication authentication)
{
_authentication = authentication;
}
public void OnAuthorization(AuthorizationContext filterContext)
{
_authentication.Authorize(filterContext.HttpContext);
}
}我总是收到
序列不包含任何元素。
任何帮助都将不胜感激。
更新:我仍然收到相同的错误。
调用堆栈如下所示
'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.的定位源校验和:'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs‘文件MD5 {3d e3 7f 86 44 70 db 0 3c 6f e0 97 Fb1e 12 13}文件不存在。查看'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'...的脚本文档寻找'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.的项目在项目中找不到该文件。查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\crt\src\’.查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\mfc\.查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\atl\’.查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\atlmfc\include\’.活动解决方案的调试源文件设置指示调试器不会要求用户查找文件: c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs.。调试器无法找到源文件'c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs'.。
我已经安装了Ninject和Ninject.MVC3从Nuget。虽然它正在试图查找要调试的文件,但它看起来是这样的。有没有人能告诉我为什么会发生这种事。
我也收到了这个错误。
System.Linq.Enumerable.Single(IEnumerable1 source) +320 Ninject.Web.Mvc.Bootstrapper.Initialize(Func1 :序列在c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\Bootstrapper.cs:67 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\ninject.web.mvc\mvc3\src\Ninject.Web.Mvc\NinjectHttpApplication.cs:65中不包含元素InvalidOperationException createKernelCallback)
发布于 2011-04-12 12:45:36
应使用以下语法注册操作筛选器:
public override void Load()
{
BindFilter<CustomAdminAuthorizationFilter>(FilterScope.Controller, 0);
Bind<IAuthentication>().To<CustomAuthenticationService>();
}你也可以apply the filter conditionally。
备注:在您的问题中看不到与NinjectDependencyResolver类的任何关系。这已经内置在ninject.mvc3中了,您不应该手动编写它。
发布于 2011-04-28 16:21:17
http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/933f62dd-80e5-4ef3-9199-9e9abfefeadf
通过取消选中“要求源文件与原始版本完全匹配”旁边的复选框解决问题。
Tools --> Options --> Debugging --> General 山达基教徒没有水果
https://stackoverflow.com/questions/5635148
复制相似问题