开发者

Ninject Kernel Injection of a provider

I'm trying to use the [Inject] attribute on a BasicRoleProvider : RoleProvider provider.

In my provider, I did:

public class BasicRoleProvider : RoleProvider
{
    [Inject]
    private IAuthenticationService authenticationService;
    /*Other stuff here*/
}

My Global.asax.cs file is as follows:

public class MvcApplication : NinjectHttpApplication
{
    /* Other stuff here */
    #region Inversion of Control

    protected override IKernel CreateKernel()
    {
        return Container;
    }

    static IKernel _container;
    public static IKernel Container
    {
        get
        {
            if (_container == null)
            {
                _container = new StandardKernel(new SiteModule());
            }
            return _container;
        }
    }

    internal class SiteModule : NinjectModule
    {
        public override void Load(开发者_运维知识库)
        {
            //Set up ninject bindings here.
            Bind<IAuthenticationService>().To<AuthenticationService>();

            this.Kernel.Inject(Roles.Provider);

        }
    }
    #endregion
}

Whenever a method in the BasicRoleProvider gets executed and is using the authenticationService, its null. I think my problem lies in the Global.ascx.cs file. Am I doing the injection right?


It seems possible that you are using Ninject in an unsupported way.

From https://github.com/ninject/ninject/wiki/Changes-in-Ninject-2

Things that were in Ninject 1.x that are not in Ninject 2:

Field injection: This is a bad practice, and has been cut for minimization.

Because you tagged your question MVC 3, I assume you are linking to Ninject 2. As far as I know, Ninject 1 in an MVC 3 app would be a dead end.

The Inject attribute still exists, and fields must still be a valid target for it, which is why you do not get a compile time error.

But Ninject 2 will happily ignore that Inject attribute on the fields, which is why it is null for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜