0

Я пытаюсь использовать этот проект из образцов IdentityServer3, https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/Clients/SampleAspNetWebApi для веб-служб API, и я хотел бы использовать Unity, как мой Dependency Injection стратегии, и я получил его от NuGet пакета «Unity.WebApi», поэтому он создает новый файл внутри моей папки app_start, где мы должны регистрировать наши типы, в моем случае у меня есть только один интерфейс. как этотUnity с Web API образца IdentityServer3

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

Так, очень просто, не так ли? Но я не знаю, что я пропускаю, потому что дело в том, что, когда я пытаюсь вызвать одно простое действие из моего контроллера он выдает мне ошибку:

{"Message":"An error has occurred.","ExceptionMessage":"An error occurred when trying to create a controller of type 'TDataController'. Make sure that the controller has a parameterless public constructor.","ExceptionType":"System.InvalidOperationException","StackTrace":" at ..................

PS: Если Доминик Байера прочитал этот вопрос Я хотел бы извиниться за свой пост в своем трекере.

ответ

0

Итак, я решил сам, и так я и сделал.

Если вы видите в моем классе запуска у меня есть это:

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

и это способ решить эту проблему с единством, я надеюсь, что это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^