目前我正在嘗試設置依賴注入並覆蓋授權屬性。儘管我總是看到錯誤,但我試圖遵循一些例子。ASP.NET MVC3 IAuthorisationfilter Ninject依賴關係
的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:\項目\ Ninject \ ninject.web.mvc \ MVC3 \ SRC \ Ninject.Web.Mvc \ NinjectHttpApplication.cs'。校驗和:MD5 {3d e3 7f 86 44 70 db 0 3c 6f e0 97 fb 1e 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:\ Projects \ Ninject \ ninject.web.mvc \ MVC3的\ src \ Ninject.Web.Mvc \ NinjectHttpApplication.cs'。 該文件在項目中找不到。 (x86)\ Microsoft Visual Studio 10.0 \ VC \ crt \ src \'... 查看目錄'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ src \ mfc \'... 在目錄'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ src \ atl \'中查找... 查看目錄'C:\ Program文件(x86)\ Microsoft Visual Studio 10.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'。
我已經從Nuget安裝Ninject和Ninject.MVC3。它看起來雖然它試圖找到要調試的文件。任何人都可以告訴我爲什麼會發生這種情況。
我也收到此錯誤
[InvalidOperationException異常:序列不包含任何元素] System.Linq.Enumerable.Single(IEnumerable的1 source) +320 Ninject.Web.Mvc.Bootstrapper.Initialize(Func
1 createKernelCallback)在C:\項目\ 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
對不起的關係是不解析器是紅鯡魚。這是留下來試圖追隨其他人的例子。 – 2011-04-12 12:54:21