I'm trying to wire up dependency injection inside my ApiControllers. I don't think AutoFac is instantiating the interface because I keep getting the following error:
Object reference not set to an instance of an object.
public class UserformsController : ApiController
{
private IUserformsRepository _userformRepo;
public UserformsController(){}
public UserformsController(IUserformsRepository userformRepo)
{
this._userformRepo = userformRepo;
}
[HttpGet]
public object Get(string userId, int formId)
{
retu _userformRepo.GetUserform(userId, formId);
}
}
And here is the config. I'm sure I'm missing something but I can't figure out what.
public static void RegisterDependencies()
{
#region Create the builder
var builder = new ContainerBuilder();
#endregion Create the builder
#region Setup a common patte
// placed here before RegisterControllers as last one wins
builder.RegisterAssemblyTypes()
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces()
.InstancePerRequest();
builder.RegisterAssemblyTypes()
.Where(t => t.Name.EndsWith("Service"))
.AsImplementedInterfaces()
.InstancePerRequest();
#endregion Setup a common patte
#region Register modules
builder.RegisterAssemblyModules(typeof(ApiController).Assembly);
#endregion Register modules
#region Register Controllers in Assembly
builder.RegisterControllers(typeof(ApiController).Assembly);
#endregion Register Controllers in Assembly
#region Inject HTTP Abstractions
/*
The MVC Integration includes an Autofac module that will add HTTP request
lifetime scoped registrations for the HTTP abstraction classes. The
following abstract classes are included:
-- HttpContextBase
-- HttpRequestBase
-- HttpResponseBase
-- HttpServerUtilityBase
-- HttpSessionStateBase
-- HttpApplicationStateBase
-- HttpBrowserCapabilitiesBase
-- HttpCachePolicyBase
-- VirtualPathProvider
To use these abstractions add the AutofacWebTypesModule to the container
using the standard RegisterModule method.
*/
builder.RegisterModule<AutofacWebTypesModule>();
#endregion Inject HTTP Abstractions
#region Register Global Filters
builder.RegisterFilterProvider();
#endregion Register Global Filters
#region Set the MVC dependency resolver to use Autofac
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
#endregion Set the MVC dependency resolver to use Autofac
}
