C# Unity与web api示例IdentityServer 3

C# Unity与web api示例IdentityServer 3,c#,dependency-injection,asp.net-web-api2,katana,identityserver3,C#,Dependency Injection,Asp.net Web Api2,Katana,Identityserver3,我试图使用IdentityServer3示例中的此项目, 对于web api服务,我想使用Unity作为我的依赖注入策略,我从nuget package Unity.WebApi获得了它,因此,它在我的app_start文件夹中创建了一个新文件,我们必须在其中注册类型,在我的例子中,我只有一个接口。像这样 var container = new UnityContainer(); container.RegisterType<IApp, AppService>(); GlobalCo

我试图使用IdentityServer3示例中的此项目, 对于web api服务,我想使用Unity作为我的依赖注入策略,我从nuget package Unity.WebApi获得了它,因此,它在我的app_start文件夹中创建了一个新文件,我们必须在其中注册类型,在我的例子中,我只有一个接口。像这样

var container = new UnityContainer();
container.RegisterType<IApp, AppService>();
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
这是我在startup类中的配置方法

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());
}
所以,很简单,不是吗? 但我不知道我遗漏了什么,因为当我试图从控制器调用一个简单操作时,它会抛出一个错误:

{消息:发生错误,异常消息:错误 尝试创建“TDataController”类型的控制器时发生。 确保控制器具有无参数的公用程序 构造函数,异常类型:System.InvalidOperationException,StackTrace: 在


PS:如果Dominick Baier读了这个问题,我想对我在他的问题追踪器上的帖子说声抱歉。

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

如果你在我的创业课程中看到:

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);
}
这就是团结一致解决这个问题的方法,我希望这会有所帮助

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