【发布时间】:2014-10-10 15:24:41
【问题描述】:
我有一个 Web Api 2 应用程序,有两个类都依赖于另一个类,我正在使用 ninject 来解决依赖关系。
public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
private IUserService _userService;
public AuthorizationServerProvider(IUserService userService)
{
_userService = userService;
}
}
public class RefreshTokenProvider : IAuthenticationTokenProvider
{
private IUserService _userService;
public RefreshTokenProvider(IUserService userService)
{
_userService = userService;
}
在startup.cs类中我需要使用上面两个类,当然不能在startup类中使用构造函数注入,因为这是在Ninject之前初始化的。
有什么办法可以让对 _tokenProvider 的引用和 _authServerProvider 在 ConfigureAuth 方法中?
public class Startup
{
private AuthorizationServerProvider _authServerProvider;
private RefreshTokenProvider _tokenProvider;
public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; }
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
app.UseNinjectMiddleware(CreateKernel);
app.UseNinjectWebApi(config);
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
public void ConfigureOAuth(IAppBuilder app)
{
var oAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true, //TODO: HTTPS
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = _authServerProvider,
RefreshTokenProvider = _tokenProvider
};
}
这里是 CreateKernel 方法
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.Dispose();
throw;
}
}
这里是我注册服务的地方
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<SimpleAuthorizationServerProvider>().ToSelf();
kernel.Bind<SimpleRefreshTokenProvider>().ToSelf();
}
我遵循了 ninject docs 中的建议,但无济于事。
【问题讨论】:
标签: .net ninject owin asp.net-web-api2