2016-08-31 1 views
0

ich bin immer "Eine Ausnahme des Typs 'System.NullReferenceException' aufgetreten in Autofac Practice.dll wurde aber nicht in Benutzercode behandelt" Mein Code und Konfiguration für Autofac ist:Autofac Null Referenzfehler web api 2

Autofac Konfiguration:

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 } 
     ); 

    } 
} 

Controller-Code:

public class HomeController : ApiController 
{ 
    IDBRepository _repository; 

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

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

Repository

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"; 
    } 
} 

In Controller-i auf dieser Linie bin immer Fehler: Rückkehr _repository.Print(); sprich Objektreferenz nicht gesetzt. _repository wird nicht referenziert ich weiß nicht, was mir für die Konfiguration fehlt.

Antwort

1

Sie müssen die Abhängigkeit (IDBRepository) im Konstruktor der Steuerung festlegen.

Anstatt also diese:

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

Sie zu tun haben:

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