2017-10-25 7 views
3

간단히 설명 할 수 없습니다. .Net 코어 2.0과 함께 Autofac을 사용하고 간단한 의존성을 해결하려고합니다. 필자는 현재의 모든 코드가 내가 시도한 모든 것을 반영하지 않도록 모든 것을 시도한 것처럼 느낀다. 여기Autofac DI, 서비스에 할당 할 수없는 유형

는 생성자의

없음 Elucidate.Core.Application.ValuesController '유형 에'Autofac.Core.Activators.Reflection.DefaultConstructorFinder '를 찾을 수 없습니다 내가 Autofac에서지고있어 예외 중 하나입니다 '를 사용할 수있는 서비스와 매개 변수로 호출 할 수 있습니다.'Elucidate.Core.Data.Repository.IRepository'1 매개 변수를 확인할 수 없습니다. [생성자의 Elucidate.Core.Model.User.IUser] rep ''Void .ctor (Elucidate.Core. 데이터. 보관실 .IRepository`

여기 내가 데피 내가 autofac 모듈 내가 잘못 뭐하는 거지

builder.RegisterType<User>().As<IUser>(); 
builder.RegisterType<CoreUserStore<User>>(); 

builder.RegisterType(typeof(Repository<User>)).As<Repository<IUser>>(); 
builder.RegisterType<EntityFrameworkModelContext<User>>(); //.As<IModelContext>(); 

의 유형을 등록하고있어 어떻게 ndency 여기

public ValuesController(IRepository<IUser> rep) 

주사입니까? 나는 autofac에 익숙하지 않고, 멸종 된 것으로 보이는 Unity에 익숙하다.

답변

3

ValuesController 생성자가 IRepository<IUser> 일 것으로 예상되며 Autofac에서 올바른 유형의 배선을 연결하지 않았습니다.

builder.RegisterType(typeof(Repository<User>)).As<IRepository<IUser>>(); 

또는 대안 생성자의 구체적인 유형에 대해 "물어"

당신은이 .As<IRepository...주의, 구현 된 인터페이스와 콘크리트 저장소 유형을 등록해야합니다.

public ValuesController(Repository<IUser> rep) 

첫 번째 방법이 가장 좋습니다. 당신은 또한 할 수있다 :

builder.RegisterType<Repository<User>>().AsImplementedInterfaces(); 

어떤 구현 된 인터페이스로 구체적인 유형을 등록합니다.

+0

감사합니다. 나는 이것을 시도했지만 여전히 얻을 수없는 예외를 얻는다. 이중 괄호 안의 표기법은 전혀 문제가되지 않습니까? 이러한 두 가지 유형 모두 해당 인터페이스를 확실히 구현합니다. 경우 ArgumentException : 유형 'Elucidate.Core.Data.Repository.Repository'1 [Elucidate.Core.Model.User.User] 'Elucidate.Core.Data.Repository.IRepository'1을 [서비스를 할당 할 수없는 [Elucidate.Core.Model.User.IUser, Elucidate.Core.Model, 버전 = 1.0.0.0, Culture = 중립, PublicKeyToken = null]] '. –

+0

@JimPhelan, 지금 다루고있는 것은 다른 문제입니다. 공분산. 'Repository '는 인터페이스 'IRepository '에 할당 될 수 없으며, Autofac없이 코드에서 시도해보십시오. 그러면 컴파일러 오류가 발생합니다. 나는 당신이'IUser'를 사용하지 말 것을 제안 할 것이고 구체적인 유형에 대해서만 리파지토리를 등록 할 것입니다. 그렇지 않으면 여기에서 공분산을 사용하는 방법을 확인할 수 있습니다. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-generic-modifier – Xenolightning

+0

@xenolightning 고맙습니다. 그것은 인터페이스를 조금 재 설계 한 후에 정렬되었습니다. 처음에 설명한대로 Autofac없이 시험해 보았어야했는데, 내가 한 번 생각하면 꽤 분명했습니다. 다시 한번 감사드립니다. –