Unity with web api sample IdentityServer3

本文关键字:sample IdentityServer3 api web with Unity | 更新日期: 2023-09-27 18:16:49

我正在尝试使用IdentityServer3示例中的这个项目,https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/SampleAspNetWebApi对于web api服务,我想使用Unity作为我的依赖注入策略,我从nuget包"Unity.WebApi"中得到了它,所以,它在我的app_start文件夹中创建了一个新文件,我们必须在那里注册我们的类型,在我的情况下,我只有一个接口。像这个

var container = new UnityContainer();
container.RegisterType<IApp, AppService>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);

在我的Apicontroller中只有一个构造函数

private readonly IApp _App;
private TDataController(IApp app)
{ _App = app; }

这是我在启动类中的配置方法

public void Configuration(IAppBuilder app)
{
    JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary();
    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = "https://localhost:44333/core",
        RequiredScopes = new[] { "write" }
    });
    UnityConfig.RegisterComponents();
    app.UseWebApi(WebApiConfig.Register());
}

所以,很简单,不是吗?但我不知道我错过了什么,因为当我试图从控制器中调用一个简单的操作时,它会给我一个错误:

{"消息":"发生错误。","ExceptionMessage":"错误尝试创建"TDataController"类型的控制器时发生。确保控制器具有无参数公共构造函数。","ExceptionType":"System.InvalidOperationException","StackTrace":"在

附言:如果Dominick Baier读到这个问题,我想对我在他的问题跟踪器上的帖子说声抱歉。

Unity with web api sample IdentityServer3

所以,我解决了自己的问题,我就是这样做的。

如果你在我的启动类中看到,我有这个:

app.UseWebApi(WebApiConfig.Register());

所以,在这个方法上,我添加了这一行来使用我的dependencyresolver

public static HttpConfiguration Register()
{
    config.DependencyResolver = UnityConfig.RegisterComponents();
    return config;
}

并且我更改了UnityConfig.RegisterComponents((的返回类型;至

public static UnityDependencyResolver RegisterComponents()
{....
    var container = new UnityContainer();
    ///here all my registertypes
    return new UnityDependencyResolver(container);
}

这就是团结一致解决这个问题的方法,我希望它能有所帮助。