【发布时间】:2011-06-15 20:37:30
【问题描述】:
我正在使用 asp.net mvc 3、ninject 2.0 和 ninject mvc 3 插件。
我想知道如何将服务层放入我的过滤器(在这种情况下是授权过滤器?)。
我喜欢做构造函数注入,这是可能的还是我必须注入属性?
谢谢
编辑
我有这个用于属性注入,但我的属性始终为空
[Inject]
public IAccountService AccountServiceHelper { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// check if context is set
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
// check if user is authenticated
if (httpContext.User.Identity.IsAuthenticated == true)
{
// stuff here
return true;
}
return false;
}
/// <summary>
/// Application_Start
/// </summary>
protected void Application_Start()
{
// Hook our DI stuff when application starts
IKernel kernel = SetupDependencyInjection();
RegisterMaps.Register();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
public IKernel SetupDependencyInjection()
{
IKernel kernel = CreateKernel();
// Tell ASP.NET MVC 3 to use our Ninject DI Container
DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
return kernel;
}
protected IKernel CreateKernel()
{
var modules = new INinjectModule[]
{
new NhibernateModule(),
new ServiceModule(),
new RepoModule()
};
return new StandardKernel(modules);
}
public class ServiceModule : NinjectModule
{
public override void Load()
{
Bind<IAccountService>().To<AccountService>();
}
}
编辑
我升级到 ninject 2.2,终于可以正常工作了。
编辑 2
我将尝试为我的授权过滤器执行构造方法,但我不确定如何传递角色。我猜我必须通过ninject来做到这一点?
编辑 3
这是我目前所拥有的
public class MyAuthorizeAttribute : AuthorizeAttribute
{
private readonly IAccountService accountService;
public MyAuthorizeAttribute(IAccountService accountService)
{
this.accountService = accountService;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext);
}
}
this.BindFilter<MyAuthorizeAttribute>(FilterScope.Controller, 0)
.WhenControllerHas<MyAuthorizeAttribute>();
[MyAuthorize]
public class MyController : BaseController
{
}
它告诉我它想要一个无参数构造函数。所以我一定是错过了什么。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 ninject ninject-2