2016-08-31 3 views
0

내가 얻고있다 "을 'System.NullReferenceException'형식의 예외가 AutoFac Practice.dll에서 발생했지만 사용자 코드에서 처리되지 않은" Autofac에 대한 나의 코드와 구성은 다음과 같습니다Autofac 널 참조 오류 웹 API를 2

Autofac 구성 :

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var builder = new ContainerBuilder(); 

     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     // OPTIONAL: Register the Autofac filter provider. 
     builder.RegisterWebApiFilterProvider(config); 

     builder.RegisterType<SqlServerRepository>().As<IDBRepository>().InstancePerRequest(); 

     // Set the dependency resolver to be Autofac. 
     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
     GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

    } 
} 

컨트롤러 코드 :

public class HomeController : ApiController 
{ 
    IDBRepository _repository; 

    void Home(IDBRepository repository) 
    { 
     _repository = repository; 
    } 

    [HttpGet] 
    public string Print() 
    { 
     return _repository.Print(); 
    } 
} 

저장소 컨트롤러에서

interface IDBRepository 
{ 
    //void Select(); 
    //void Insert(); 
    //void Update(); 
    //void Delete(); 

    string Print(); 
} 

public class SqlServerRepository : IDBRepository 
{ 
    public string Print() 
    { 
     return "hello there, i am Sql Server"; 
    } 
} 

내가이 줄에 오류가 점점 오전 :) (_repository.Print를 반환 ; : 개체 참조가 설정되지 않음을 나타냅니다. _repository가 참조를 얻지 못했습니다. 구성에 대해 누락 된 것이 무엇인지 알 수 없습니다.

답변

1

컨트롤러 생성자에서 종속성 (IDBRepository)을 설정해야합니다. 그래서 그 대신이의

: 당신이해야합니다

void Home(IDBRepository repository) 
{ 
    _repository = repository; 
} 

는해야 할 일 :

public HomeController(IDBRepository repository) 
{ 
    _repository = repository; 
}