При использовании Ninject в моем MVC3 я получаю исключение Ninject.ActivationException: Ошибка активации IRepository {Ranking}, установленного через Nuget - PullRequest
3 голосов
/ 27 марта 2012

Я установил Ninject через nuget и зарегистрировал свои привязки в методе RegisterServices NinjectMVC3 (создан nuget). Следуй за моим кодом:

private static void RegisterServices(IKernel kernel)
{   
    kernel.Bind<IUnitOfWork>().To<UnitOfWork>();
    kernel.Bind<IRepository<Action>>().To<ActionRepository>();
    kernel.Bind<IRepository<ActionType>>().To<ActionTypeRepository>();
    kernel.Bind<IRepository<City>>().To<CityRepository>();
    kernel.Bind<IRepository<Country>>().To<CountryRepository>();
    kernel.Bind<IRepository<Goods>>().To<GoodsRepository>();
    kernel.Bind<IRepository<Media>>().To<MediaRepository>();
    kernel.Bind<IRepository<MediaType>>().To<MediaTypeRepository>();
    kernel.Bind<IRepository<Ranking>>().To<RankingRepository>();
    kernel.Bind<IRepository<Role>>().To<RoleRepository>();
    kernel.Bind<IRepository<Sponsor>>().To<SponsorRepository>();
    kernel.Bind<IRepository<State>>().To<StateRepository>();
    kernel.Bind<IRepository<UserAccountInfo>>().To<UserAccountInfoRepository>();
    kernel.Bind<IRepository<UserAction>>().To<UserActionRepository>();
    kernel.Bind<IRepository<UserDeservesGoods>>().To<UserDeservesGoodsRepository>();
    kernel.Bind<IRepository<UserGoods>>().To<UserGoodsRepository>();
    kernel.Bind<IRepository<User>>().To<UserRepository>();
    kernel.Bind<IUserService>().To<UserService>();
    kernel.Bind<IAccountService>().To<AccountService>();

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}     

вот мой HomeController:

readonly IRepository<Ranking> repoRanking;
public HomeController(IRepository<Ranking> repoRanking)
{
    this.repoRanking = repoRanking;
}

Когда я запускаю HomeController, я получаю следующее исключение:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: Ninject.ActivationException: Error activating IRepository{Ranking}
No matching bindings are available, and the type is not self-bindable.
Activation path:
 2) Injection of dependency IRepository{Ranking} into parameter repoRanking of constructor of type HomeController
 1) Request for HomeController

Suggestions:
 1) Ensure that you have defined a binding for IRepository{Ranking}.
 2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
 3) Ensure you have not accidentally created more than one kernel.
 4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
 5) If you are using automatic module loading, ensure the search path and filters are correct.

Что я делаю не так?

1 Ответ

2 голосов
/ 27 марта 2012

Вы создали модуль по умолчанию, в котором вы устанавливаете привязки вместо метода регистрации служб?

 public class DefaultModule : NinjectModule {
    public override void Load() {
        Bind<IProductService>().To<ProductService>().InTransientScope();
    }
 }

и затем в вашем файле Global.asax сделайте следующее:

 protected override IKernel CreateKernel() {
  var kernel = new StandardKernel();

  kernel.Load(Assembly.GetExecutingAssembly());

 return kernel;
 }
...