I have the following error:
ExceptionMessage=None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'RestAPI.DevelopersController' can be invoked with the available services and parameters: Cannot resolve parameter 'Services.DevelopersService userService' of constructor 'Void .ctor(Services.DevelopersService)'.
Global.asax.cs
protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
        AutoMapperConfig.RegisterMappings();
        var builder = new ContainerBuilder();
        builder.RegisterModule(new ServiceModule());
        builder.RegisterModule(new ORMModule());
        builder.RegisterApiControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();
        var container = builder.Build();
        var resolver = new AutofacWebApiDependencyResolver(container);
        GlobalConfiguration.Configuration.DependencyResolver = resolver;
    }
ServiceModule.cs
public class ServiceModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterAssemblyTypes(Assembly.Load("Services"))
                 .Where(t => t.Name.EndsWith("Service"))
                 .AsImplementedInterfaces()
                 .InstancePerLifetimeScope();
    }
}
ORMModule.cs
public class ORMModule : Autofac.Module
{
    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType(typeof(DatabaseContext)).As(typeof(DbContext)).InstancePerLifetimeScope();
    }
}
DevelopersController
public class DevelopersController : ApiController
{
    private DevelopersService _developersService;
    public DevelopersController(DevelopersService userService)
    {
        _developersService = userService;
        _developersService.SetIdentity(HttpContext.Current.Request.LogonUserIdentity.Name.ToString().Substring(4));
    }
DevelopersService.cs
public class DevelopersService : IService<User>
{
    private DatabaseContext _db;
    public DevelopersService(DatabaseContext db)
    {
        _db = db;
    }
    public void SetIdentity(string username)
    {
    }
    public User Create(User entity)
    {
        return new User();
    }
    public User Read(User Id)
    {
        return new User();
    }
    public void Update(User user)
    {
    }
    public void Delete(User Id)
    {
    }
    public IEnumerable<User> GetAll()
    {
        return _db.Users.AsEnumerable();
    }
}
IService.cs
public interface IService<T> where T : BaseEntity
{
    void SetIdentity(string identity);
    T Create(T entity);
    T Read(T Id);
    void Update(T entity);
    void Delete(T Id);
    IEnumerable<T> GetAll();
}
How can I fix it?
This error message occurs when Autofac try to instantiate a DevelopersController. In order to create a new DevelopersController it have to provide an instance DevelopersService but none of them are registered in Autofac. 
Eeven if the following piece of code
builder.RegisterAssemblyTypes(Assembly.Load("Services"))
       .Where(t => t.Name.EndsWith("Service"))
       .AsImplementedInterfaces()
       .InstancePerLifetimeScope();
register a DevelopersService in Autofac, it doesn't register it as a DevelopersService but as implemented interfaces (ie IService<User>)
In order to fix your issue, you can change your registration to register the service as itself
builder.RegisterAssemblyTypes(Assembly.Load("Services"))
       .Where(t => t.Name.EndsWith("Service"))
       .AsImplementedInterfaces()
       .AsSelf()
       .InstancePerLifetimeScope();
or change your DevelopersController to not rely on DevelopersService but on IService<USer>
public class DevelopersController : ApiController
{
    private IService<USer> _userService;
    public DevelopersController(IService<USer> userService)
    {
        _userService= userService;
        _userService.SetIdentity(HttpContext.Current.Request.LogonUserIdentity.Name.ToString().Substring(4));
    }
I would recommend this solution.
OK so I'm using nopcommerce, and in my dependancy registrar I have a type
Had typed:
builder.RegisterType<CustomerReturnsService>().As<CustomerReturnsService>();
Supposed to be
builder.RegisterType<CustomerReturnsService>().As<ICustomerReturnsService>();
Notice the I in last customer returns service. It links to the interface of the service.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With