3

MVC/WebApi 앱이 있습니다. 나는이 솔루션을 위해 Autofac을 사용하기 시작했다.Autofac 무작위 매개 변수가없는 public 생성자입니다. 오류

Autofac이 작동합니다. 그러나 임의로 오류가 발생합니다 :

'SomeController'유형의 컨트롤러를 만들려고 할 때 오류가 발생했습니다. 컨트롤러에 매개 변수없는 public 생성자가 있는지 확인하십시오.

솔루션을 청소하고 다시 작성해야합니다. 그리고 더 이상 오류가 없습니다. Visual Studio의 인스턴스 (복구를 실행해야 할 수도 있음)라고 생각했습니다. 그러나 방금 IIS로 릴리스하려고 시도하고 오류가 다시 나타납니다.

아무도 전에 이것을 만난 사람이 있습니까?

public class CryptographyModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterType<AesCryptographyService>() 
      .As<IAesCryptographyService>() 
      .InstancePerRequest(); 
    } 
} 

나는 Autofac 부트 스트랩이 사용하고 있습니다 : 나는 모든 등록은과 같이 모듈을 완료 한

:

여기에 일부 코드 정보의

public static class Bootstrapper 
{ 
    public static void Run() 
    { 
     BootStrapAutofac(); 
    } 

    private static void BootStrapAutofac() 
    { 
     var builder = new ContainerBuilder(); 
     var localAssemblies = GetLocalAssemblies(); 
     builder.RegisterApiControllers(localAssemblies); 
     builder.RegisterControllers(localAssemblies); 
     builder.RegisterAssemblyModules(localAssemblies); 


     //build container 
     var container = builder.Build(); 
     var webApiResolver = new AutofacWebApiDependencyResolver(container); 
     GlobalConfiguration.Configuration.DependencyResolver = webApiResolver; 

     var mvcResolver = new AutofacDependencyResolver(container); 
     DependencyResolver.SetResolver(mvcResolver); 

    } 

    private static Assembly[] GetLocalAssemblies() 
    { 
     return AppDomain.CurrentDomain.GetAssemblies() 
      .Where(a => a.GetName().Name.StartsWith("Loc")) 
      .ToArray(); 
    } 
} 
+0

어떤 웹 API 버전을 사용하고 있습니까? 2.1 인 경우 http://www.nuget.org/packages/Autofac.WebApi2 (및 mvc5를 사용하는 경우 https://www.nuget.org/packages/Autofac.Mvc5) –

+0

Web Api 2 및 나는 두 번 확인해야하지만 99.9 %는 Autofac.webapi2가 설치되어 있고 mvc5가 – bsavio

+0

인 것을 확인했습니다. 위의 내용을 모두 확인했습니다. 나는 알았지 만 당신의 아주 유효한 제안은 제게 두 번째 추측을 시켰습니다. 어쨌든, 이것이 자동 스튜디오가 아닌 시각적 인 스튜디오 구축 문제 일 수 있습니까? – bsavio

답변

7

내가 가진 이런 문제. 내 문제는 응용 프로그램 진입 점 (Global.asax, Application_Start)에 DependencyResolver.SetResolver();GlobalConfiguration.Configuration.DependencyResolver을 설정하지 않았다는 것입니다. 그래서 ASP.NET 내 컨트롤러에서 내 종속성을 해결할 수 없습니다 그리고 동일한 예외가 있어요.

응용 프로그램이 시작될 때 종속성 해결 프로그램을 설정하면 내 문제가 해결됩니다.

귀하의 경우, 솔루션을 정리하고 다시 작성한다고 말하면서 어셈블리를 Autofac에 등록하는 방법이 문제 일 수 있습니다. GetLocalAssemblies을 호출 할 때 등록중인 모든 어셈블리를 기록하고 종속성이있는 컨트롤러와 어셈블리가있는 어셈블리가 등록되어 있는지 확인하십시오.

+0

그게 좋은 생각입니다. – bsavio

+2

확인. 오류가 발생하여 등록 할 때 모든 어셈블리가 잡히지 않는 것으로 나타났습니다. ** ** 또한, 두 개의 Asp.Net WebApi 프로젝트에서 사용되는 별도의 프로젝트에 부트 스트랩 코드가 있다는 것을 깨달았습니다. 하나의 프로젝트에만 문제가 있습니다. 다른 하나는 전혀 문제가 없었습니다. – bsavio

+0

아마 'AppDomain.CurrentDomain.GetAssemblies()'에 문제가있을 수 있습니다. 어쩌면 ASP.NET은 필요할 때마다 CurrentDomain에서 어셈블리를로드합니다. 따라서 호출 할 때 필요한 모든 어셈블리가 없을 수도 있습니다. 확인이 당신을 도움이된다면 : http://stackoverflow.com/questions/3552223/asp-net-appdomain-currentdomain-getassemblies-assemblies-missing-after-app http://stackoverflow.com/questions/18656821/why-does-appdomain-currentdomain-getassemblies-not-return-dependent-assemblies – japoneizo

0

필자의 경우 스택 추적에서 충분히 깊숙한 곳을 찾지 못했습니다. 내부 예외의 더 깊은 부분은 실제 오류였습니다. 아마도 Autofac이 종속성을 찾을 수 없기 때문입니다.

관련 문제