h3n
h3n

Reputation: 5248

Dependency Resolver using Ninject

I am always getting the error No parameterless constructor defined for this object. when I execute the codes below.

It must be something to do with my ninject modules. What seems to be the problem here?

Controller


  public class AccountController : Controller
    {
        private readonly IUserService _service; 

        public AccountController(IUserService service)
        {
            _service = service;
        }
    }

Service Layer


 public class UserService : ServiceBase<User>, IUserService
    {
        public UserService(IRepository repository) : base(repository)
        {
        }

    }

    public interface IUserService : IService<User>
    {
    }

Repository


public class UserRepository : RepositoryBase<User>, IUserRepository
    {

    }

    public interface IUserRepository : IRepository<User>
    {

    }

Ninject ---- ServiceModule


 public class ServiceModule : NinjectModule
    {
        public override void Load()
        {
           Bind<IUserService>().To<UserService>();
}
}

RepositoryModule


 public class RepositoryModule : NinjectModule
    {
        public override void Load()
        {
           Bind<IUserRepository>().To<UserRepository>();
}
}

Setup


 public static void SetupDependencyInjection()
        {
            // Create Ninject DI kernel
            var kernel = CreateKernel();

            // Tell ASP.NET MVC 3 to use our Ninject DI Container
            DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
        }

        private static IKernel CreateKernel()
        {
            var modules = new INinjectModule[]
                              {
                                 new ServiceModule(),
                                 new RepositoryModule()
                              };

            return new StandardKernel(modules);
        }

Upvotes: 0

Views: 1418

Answers (1)

nemesv
nemesv

Reputation: 139798

Have have registered:

Bind<IUserRepository>().To<UserRepository>();

But you are referring to the base IRepository interface in UserService:

    public UserService(IRepository repository) : base(repository)
    {
    }

So Ninject won't know how to construct a generic IRepository. You need to Bind a implementation for IRepository. Or use IUserRepository in UserService:

    public UserService(IUserRepository repository) : base(repository)
    {
    }

Upvotes: 1

Related Questions