Unity WebAPI:无法解析单个类型
本文关键字:单个 类型 WebAPI Unity | 更新日期: 2023-09-27 17:54:34
我已经创建了一个独立的WebAPI(没有客户端),并试图开始使用WebAPI的Unity容器实现DI。
但是,当在OAuthServerOptions中指定我的提供者时(它依赖于自定义令牌身份验证服务),我无法手动指定它们应该解析到什么。
如果有人可以指出我在哪里走错了,因为它似乎工作有点不同于Unity与MVC。
统一配置:
.RegisterComponents()
在Startup.cs中被称为
public static class UnityConfig
{
public static void RegisterComponents()
{
var container = new UnityContainer();
// These two are the ones which won't resolve!
container.RegisterType<IAuthenticationTokenProvider, SimpleRefreshTokenProvider>();
container.RegisterType<IOAuthAuthorizationServerProvider, SimpleAuthorizationServerProvider>();
container.RegisterType<ITokenAuthenticationManager, TokenAuthenticationManager>(new HierarchicalLifetimeManager());
// Some more type registrations which work fine...
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
}
}
启动。身份验证:
这是我无法手动解析提供程序的地方…
public partial class Startup
{
public static OAuthAuthorizationServerOptions OAuthServerOptions { get; private set; }
public void ConfigureAuth(IAppBuilder app)
{
// Some OWIN context setups...
// Auth server setup
OAuthServerOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IOAuthAuthorizationServerProvider)),
RefreshTokenProvider = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IAuthenticationTokenProvider)),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(timeSpan.TotalMinutes + 5),
AllowInsecureHttp = true
};
// Enable bearer tokens...
}
}
启动:public partial class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
UnityConfig.RegisterComponents();
ConfigureAuth(app);
WebApiConfig.Register(config);
app.UseCors(CorsOptions.AllowAll);
app.UseWebApi(config);
}
}
SimpleAuthorizationServiceProvider:
// Note: OAuthAuthoizationServiceProvider implements IOAuthAuthorizationServerProvider
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
private ITokenAuthenticationManager tokenAuthenticationManager;
public SimpleAuthorizationServerProvider(ITokenAuthenticationManager tokenAuthenticationManager)
{
this.tokenAuthenticationManager = tokenAuthenticationManager;
}
}
SimpleRefreshTokenProvider:
public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider
{
private ITokenAuthenticationManager tokenAuthenticationManager;
public SimpleRefreshTokenProvider(ITokenAuthenticationManager tokenAuthenticationManager)
{
this.tokenAuthenticationManager = tokenAuthenticationManager;
}
}
如您所知,startup.cs将首先被调用。我看到你没有在startup。cs中注册Unity
这意味着你找不到具体的实现。