0

我当前的设置是使用 Ninject 进行简单的 IoC,一切正常,但我无法在AuthorizeAttribute. 我需要访问一个执行 ClaimsVerification 的类:

这是我的代码:

国际奥委会配置:

        var kernel = new StandardKernel(); // Ninject IoC
        // These registrations are "per instance request".
        // See http://blog.bobcravens.com/2010/03/ninject-life-cycle-management-or-scoping/

        kernel.Bind<RepositoryFactories>().To<RepositoryFactories>()
            .InSingletonScope();

        kernel.Bind<IRepositoryProvider>().To<RepositoryProvider>();
        kernel.Bind<ISmartDocumentorUow>().To<SmartDocumentorUow>();
        kernel.Bind<IClaimsVerification>().To<ClaimsVerification>();
       // kernel
        //kernel.BindFilter<MyAuthorizeAttribute>(FilterScope.Controller, 0).WhenControllerHas<RequireRolesAttribute>();

        // Tell WebApi how to use our Ninject IoC
        config.DependencyResolver = new NinjectDependencyResolver(kernel);

我的授权属性:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    [Inject]
    IClaimsVerification clamisverify { get; set; }

    public MyAuthorizeAttribute()
    {
        //var x = System.Web.Mvc.DependencyResolver.Current.(typeof(IClaimsVerification));
    }
4

2 回答 2

1

是的,对不起,问题是注入了在 web api 中不起作用的 iClaimsverification。

我尝试了公共财产,但仍然没有用。

bindfilter 被注释掉,因为它不存在于核心 NInject api (dll) 中,它确实存在于 ninject 的 MVC dll 中,但它适用于 web mvc 中的 Action 过滤器,而不适用于我的 api mvc可以告诉..

我确实解决了这样的问题,尽管我不喜欢很多这样的修复:

 private IClaimsVerification verifier
    {
        get
        {
            return (GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IClaimsVerification)) as IClaimsVerification);
        }
    }
于 2012-09-28T14:03:06.570 回答
0

您标记的属性Inject是私有的 - 您需要使用自定义配置初始化 Ninject 以选择效率低得多的过程

(您没有在问题中说明问题。我看到您正在尝试 BindFilter,但它已被注释掉(为什么?) - 这是正确的方法。我建议阅读有关 BindFilter 的 Ninject.MVC3 wiki 文章作为示例)

于 2012-09-26T21:58:29.730 回答