我尝试使用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>();
答案 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..
条件。