Ninject 2.1 ActivationException:激活字符串时出错

win*_*ong 7 c# ninject inversion-of-control

我很困惑为什么我收到"Ninject.ActivationException:错误激活字符串没有匹配的绑定可用,并且类型不可自绑定"在随机绑定中.如果我保留IMedia的绑定,它将抛出ActivationException,但如果我使用CallbackProvider它就可以工作.所有这些类的结构都相同,只有几个不同的属性.我很困惑为什么ILocationType,IMedia和IFarmDataContext抛出ActivationException而其他人没有.有任何想法吗?

/******************************
 * Core Types
 ******************************/
Bind<IFarmDataContext>().ToProvider(new CallbackProvider<IFarmDataContext>(delegate { return new FarmDataContext(); }));

//Media
Bind<IMedia>().To<Media>(); //blows up
//Bind<IMedia>().ToProvider(new CallbackProvider<IMedia>(delegate { return new Media(); }));
Bind<IMediaType>().To<MediaType>();
Bind<IMediaRelated>().To<MediaRelated>();

//Location
Bind<ILocation>().To<Location>();
Bind<ILocationType>().ToProvider(new CallbackProvider<ILocationType>(delegate { return new LocationType(); }));
Bind<ILocationDetail>().To<LocationDetail>();
Run Code Online (Sandbox Code Playgroud)

Ian*_*vis 4

Ninject 没有绑定要在 Media .ctor 中注入的“String key”;当它尝试创建依赖于 Media 的类型时,它不知道如何解决依赖关系并抛出异常。对于大多数类型,Ninject 会尝试为您创建一些东西,但是字符串和值类型不能自绑定,因为我们没有为它们提供良好的默认值,并且它可能会对使用不同基元约定的类型造成严重破坏。

您需要在绑定中添加参数值(.WithContructorArgument("key", someValue))或使用某种提供程序(您已经完成)。