首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我的MVC3中使用Ninject时,我得到一个Ninject.ActivationException:错误激活通过Nuget安装的IRepository{Ranking}

在我的MVC3中使用Ninject时,我得到一个Ninject.ActivationException:错误激活通过Nuget安装的IRepository{Ranking}
EN

Stack Overflow用户
提问于 2012-03-27 05:18:14
回答 1查看 3.7K关注 0票数 3

我通过nuget安装了Ninject,并在NinjectMVC3的RegisterServices方法(由nuget创建)中注册了我的绑定。遵循我的代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
readonly IRepository<Ranking> repoRanking;
public HomeController(IRepository<Ranking> repoRanking)
{
    this.repoRanking = repoRanking;
}

当我执行HomeController时,我得到了如下异常:

代码语言:javascript
复制
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.

我哪里做错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-27 05:26:50

您是否创建了一个默认模块来设置绑定,而不是在register服务方法中?

代码语言:javascript
复制
 public class DefaultModule : NinjectModule {
    public override void Load() {
        Bind<IProductService>().To<ProductService>().InTransientScope();
    }
 }

然后在您的Global.asax文件中执行以下操作:

代码语言:javascript
复制
 protected override IKernel CreateKernel() {
  var kernel = new StandardKernel();

  kernel.Load(Assembly.GetExecutingAssembly());

 return kernel;
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9880037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档