Ninject setter方法返回null

时间:2015-11-26 09:02:25

标签: c# ninject asp.net-web-api2

我尝试使用Setter Method进行注射。然而,我一直有一个空引用异常。

public class CustomOAuthProvider : OAuthAuthorizationServerProvider
{
    private IMembershipService _membershipService;

    [Inject]
    public void SetMembershipService(IMembershipService membershipService)
    {
        _membershipService = membershipService;
    }

    //Code omitted
}

我没有使用构造函数注入,因为CustomOAuth提供程序用于实例化OAuthAuthorizationServerOptions,在这种情况下,我必须以某种方式在构造函数中传递参数 -

var oAuthServerOptions = new OAuthAuthorizationServerOptions
{
    AllowInsecureHttp = true,
    TokenEndpointPath = new PathString("/oauth2/token"),
    AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
    Provider = new CustomOAuthProvider(),
    AccessTokenFormat = new CustomJwtFormat(ConfigurationManager.AppSettings["owin:issuer"])
};

Ninject模块 -

Bind<IMembershipService>().To<MembershipService>();

1 个答案:

答案 0 :(得分:1)

要将某些内容注入未由ninject实例化的实例,您需要调用

kernel.Inject(..instance...);
创建对象后

。为什么? Ninject并不神奇地知道何时创建对象。因此,如果它不是自己创建对象,则需要告诉它对象。

引用您的评论,这是绑定OAuthAuthorizationServerOptions的选项之一:

Bind<OAuthorizationServerOptions>().ToConstant(new OAuthAuthorizationServerOptions
    {
        AllowInsecureHttp = true,
        TokenEndpointPath = new PathString("/oauth2/token"),
        AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
        Provider = new CustomOAuthProvider(),
        AccessTokenFormat = new CustomJwtFormat(
           ConfigurationManager.AppSettings["owin:issuer"])
    })
.WhenInjectedInto<CustomOAuthProvider>();

然后WhenInjectedInto确保仅在创建CustomOAuthProvider时使用这些选项。如果你总是(仅)使用CustomOAuthProvider,你可以删除When..条件。