我使用asp.net mvc 3,ninject 2.0和ninject mvc 3插件。如何使用Ninject将服务注入授权过滤器?
我想知道如何获得服务图层到我的过滤器(在这种情况下是授权过滤器?)。
我喜欢做构造函数注入所以这是可能的还是我必须注入属性?
感谢
编辑
我有这个财产注入,但我的财产总是空
[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
{
}
它告诉我,它想是一个无参数的构造函数。所以我必须错过一些东西。
@Darin季米特洛夫 - 我想我会尝试注入财产。我遇到问题了。我会更新我的帖子。 – chobo2 2011-06-15 20:49:19
@ chobo2,看看我提供的有关您拥有的两种可能性的示例。 – 2011-06-15 20:55:38
@Darin Dimitrov-我一直在阅读 - > http://www.planetgeek.ch/2010/11/13/official-ninject-mvc-extension-gets-support-for-mvc3/,他们似乎再次推荐属性注入,因为它是向后兼容的,我猜将来会被取代。如果我使用选项1.属性标记在控制器/操作方法上的外观如何。如果我继续进行财产注入,我错过了什么,因为我似乎拥有你的财产,但我的财产为空。我知道绑定工程因为我使用绑定在构造函数注入,它不是null。 – chobo2 2011-06-15 20:57:20