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;
    }
}

Unity WebAPI:无法解析单个类型

如您所知,startup.cs将首先被调用。我看到你没有在startup。cs中注册Unity
这意味着你找不到具体的实现。