Решение зависимостей с использованием Ninject - PullRequest
0 голосов
/ 05 ноября 2011

Я всегда получаю ошибку No parameterless constructor defined for this object. когда я выполняю коды ниже.

Это должно быть как-то связано с моими недействительными модулями. В чем здесь проблема?

Контроллер


  public class AccountController : Controller
    {
        private readonly IUserService _service; 

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

Сервисный уровень


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

    }

    public interface IUserService : IService<User>
    {
    }

Репозиторий


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

Настройка


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

1 Ответ

1 голос
/ 05 ноября 2011

Зарегистрировались:

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

Но вы имеете в виду базовый IRepository интерфейс в UserService:

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

Так что Ninject не будет знать, как создать универсальный IRepository. Вам необходимо привязать реализацию для IRepository. Или используйте IUserRepository in UserService:

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