English 中文(简体)
C# 注射器与制造器导致活性异常
原标题:C# Ninject WithConstructorArgument Causing ActivationException

从另一个问题开始,我有一个 < href=> "https://stackoverflow.com/ questions/10649261/ninjects-bind-constructor-argument-to- property-of-other-object" > >这里 我有一个 MainConfig 对象,我想输入该对象的某些属性,而不是实际的 MainConfig 对象本身。

Bind<IConfig>()
    .ToMethod<IConfig>(ctx => MainConfig.Load())
    .InSingletonScope();

var config = Kernel.Get<IConfig>(); //this returns a fully-loaded IConfig, so I know this works

Bind<IProcessingBuffer>()
    .To<ProcessingBuffer>()
    .InSingletonScope()
    .WithConstructorArgument("processingInterval",
                             ctx => ctx.Kernel.Get<IConfig>().WinService.DataProcessingInterval);

processingBuffer 的构建器是:

public ProcessingBuffer(int processingInterval, IProcessingResults procResults)

然而,当我尝试启动我的应用程序时,我得到了一个 < code> activation Exception ,因为 < code> processingBuffer 并没有被注入到 < code > processingBuffer 中。 例外的是:

Ninject.ActivationException was unhandled
  Message=Error activating int
No matching bindings are available, and the type is not self-bindable.
Activation path:
  5) Injection of dependency int into parameter processingInterval of constructor of type ProcessingBuffer
  4) Injection of dependency ProcessingBuffer into parameter procBuffer of constructor of type MyCompanyDataService
  3) Injection of dependency MyCompanyDataService into parameter instance of constructor of type NinjectServiceHost{MyCompanyDataService}
  2) Injection of dependency NinjectServiceHost{MyCompanyDataService} into parameter dataHost of constructor of type MyCompanyWinService
  1) Request for MyCompanyWinService

Suggestions:
  1) Ensure that you have defined a binding for int.
  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.

  Source=Ninject
  StackTrace:
       at Ninject.KernelBase.Resolve(IRequest request) in c:ProjectsNinject
injectsrcNinjectKernelBase.cs:line 362
       at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 197
       at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 165
       at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 114
       at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at Ninject.Activation.Context.Resolve() in c:ProjectsNinject
injectsrcNinjectActivationContext.cs:line 157
       at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:ProjectsNinject
injectsrcNinjectKernelBase.cs:line 386
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
       at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 197
       at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 165
       at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 114
       at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at Ninject.Activation.Context.Resolve() in c:ProjectsNinject
injectsrcNinjectActivationContext.cs:line 157
       at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:ProjectsNinject
injectsrcNinjectKernelBase.cs:line 386
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
       at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 197
       at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 165
       at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 114
       at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at Ninject.Activation.Context.Resolve() in c:ProjectsNinject
injectsrcNinjectActivationContext.cs:line 157
       at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:ProjectsNinject
injectsrcNinjectKernelBase.cs:line 386
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
       at Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 197
       at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) in c:ProjectsNinject
injectsrcNinjectPlanningTargetsTarget.cs:line 165
       at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 114
       at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
       at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
       at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
       at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:ProjectsNinject
injectsrcNinjectActivationProvidersStandardProvider.cs:line 96
       at Ninject.Activation.Context.Resolve() in c:ProjectsNinject
injectsrcNinjectActivationContext.cs:line 157
       at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in c:ProjectsNinject
injectsrcNinjectKernelBase.cs:line 386
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
       at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
       at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters) in c:ProjectsNinject
injectsrcNinjectSyntaxResolutionExtensions.cs:line 37
       at MyCompany.WinService.Program.Main(String[] args) in C:ProjectsMyProjectMyCompanyWinServiceProgram.cs:line 41
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

是否有办法我可以确认我的 < code> with Constructor Argument < /code> lambda 甚至被调用并追踪它。 我下载了注射源, 但我无法确定在哪里设置断点, 以找到我的回调地点 。

此应用程序是一个窗口服务, 使用 ninject 3. 0 和 ninject. Extensions.Wcf 来托管 WCF TCP 服务 。

要添加的编辑 : 如果我更改 < code> processingBuffer 构建器, 将整个 < code> IConfig 对象取走, 并删除 < code> withcomptictorArgument 调用 < /code> 对象, 那么 < code> > IConfig 对象就会被成功注入, 我可以访问相应的属性 。 但是, 我要从输入整个 < code> IConfig 对象移开, 以删除该依赖性, 而不是只通过所需的数据 。

最佳回答

您的 MyCompanyDataService processingBuffer 实例为例,而不是 IprocessingBuffer 。 因此,您的绑定不适用 。

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签