1

Я пытаюсь получить Unity Container Dependency Injection, работая над автономным приложением owin. Я добавил NuGet пакет Unity для моего проекта, и создали свой класс UnityConfig следующим образом:Unity DI не работает в DI - конструктор контроллера по умолчанию, называемый вместо

public static class UnityConfig 
{ 
    public static void RegisterComponents() 
    { 
     var container = new UnityContainer(); 

     // register all your components with the container here 
     // it is NOT necessary to register your controllers 

     // e.g. container.RegisterType<ITestService, TestService>(); 

     container.RegisterType<IDBContext,UniversalCoatingsDbContext>(); 
     container.RegisterType<IUserRepository,UserRepository>(); 

     GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 
    } 
} 

Затем я создал мой контроллер, как это:

public class UserController : ApiController 
{ 
    private IUserRepository userRepo; 

    public UserController() { 
     Console.WriteLine("User controller default constructor"); 
    } 

    //dependency injected value 
    public UserController(IUserRepository repo) 
    { 
     this.userRepo = repo; 
     Console.WriteLine("DI enabled constructor"); 
    } 

    [HttpPost] 
    public JsonResult<MessageResponse> Register(UnhashedUser unhashed_user) 
    { 
     MessageResponse response = new MessageResponse(); 
     if(ModelState.IsValid) 
     { 
      response = userRepo.createUser(unhashed_user); 
     } 
     else 
     { 
      response.message = "Invalid Request sent."; 
     } 

     return Json(response); 

    } 

} 

The UnityConfig.RegisterComponents () метод вызывается в конце моего метода Configuration() моего класса запуска (после установки промежуточного программного обеспечения). Когда я обращаюсь к URL этого контроллера, конструктор без параметров всегда вызывается, и поэтому экземпляр IUserRepository никогда не разрешается.

Я пропустил какой-то образ конфигурации? Любая информация очень ценится.

+1

Попробуйте удалить конструктор по умолчанию – whymatter

+0

Если я делаю, я получаю «конструктор по умолчанию не» исключение – tutiplain

+0

Попробуйте сделать это частный – whymatter

ответ

0

Я изменил свой класс UnityConfig, чтобы открыть контейнер как статическую переменную. А потом,

Я добавил это в моем классе запуска:

 //set up dependency injection 
     UnityConfig.RegisterComponents(); 
     config.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(UnityConfig.container); 
     app.UseWebApi(config); 
Смежные вопросы