2016-08-31 8 views
0

私は取得しています「を 『System.NullReferenceException』種類の例外はAutoFac Practice.dllで発生したが、ユーザーコードで処理されなかった」 Autofacのための私のコードと構成は次のとおりです。Autofac null参照エラーウェブ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; 
}