2013-04-20 53 views
0

试图使用ninject将我的接口绑定到一个具体的类,但我必须失去一些东西,并不能得到它的工作。Ninject中的绑定 - 提供的泛型参数不等于泛型类型定义的参数?

System.ArgumentException was unhandled by user code 
    HResult=-2147024809 
    Message=The number of generic arguments provided doesn't equal the arity of the generic type definition. 
Parameter name: instantiation 
    Source=mscorlib 
    ParamName=instantiation 
    StackTrace: 
     at System.RuntimeType.MakeGenericType(Type[] instantiation) 
     at Ninject.Activation.Providers.StandardProvider.GetImplementationType(Type service) in StandardProvider.cs:line 126 
     at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in StandardProvider.cs:line 77 
     at Ninject.Activation.Context.Resolve() inContext.cs:line 157 
     at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in KernelBase.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 Target.cs:line 197 
     at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) inTarget.cs:line 165 
     at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in StandardProvider.cs:line 114 
     at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in StandardProvider.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 StandardProvider.cs:line 96 
     at Ninject.Activation.Context.Resolve() inContext.cs:line 157 
     at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in KernelBase.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) inTarget.cs:line 197 
     at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) inTarget.cs:line 165 
     at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in StandardProvider.cs:line 114 
     at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass4.<Create>b__2(ITarget target) in StandardProvider.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 StandardProvider.cs:line 96 
     at Ninject.Activation.Context.Resolve() inContext.cs:line 157 
     at Ninject.KernelBase.<>c__DisplayClass10.<Resolve>b__c(IBinding binding) in KernelBase.cs:line 386 
     at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 
     at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) 
     at PriceCheck.Api.Models.Ninject.NinjectScope.GetService(Type serviceType) in NinjectScope.cs:line 24 
     at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) 
     at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
    InnerException: 

崩溃这里

public object GetService(Type serviceType) 
     { 
      IRequest request = resolutionRoot.CreateRequest(serviceType, null, new Parameter[0], true, true); 
      return resolutionRoot.Resolve(request).SingleOrDefault(); 
     } 



    public interface IResponseResult 
    { 
     void AddError(string key, string errorMessage); 
     bool IsValid(); 
     Dictionary<string, string> Errors { get; } 

     ResponseBase Status { get; set; } 
    } 


public class ResponseResult<T> : IResponseResult 
    { 
     public ResponseResult() 
     { 
      Errors = new Dictionary<string, string>(); 
      Status = new ResponseBase(); 
     } 

     public void AddError(string key, string errorMessage) 
     { 
      if (!Errors.ContainsKey(key)) 
      { 
       Errors.Add(key, errorMessage); 
      }   
     } 

     public bool IsValid() 
     { 
      if (Errors.Count > 0) 
      { 
       return false; 
      } 

      return true; 
     } 

     public Dictionary<string, string> Errors { get; private set; } 
     public T Response { get; set; } 

     public ResponseBase Status { get; set; } 
    } 


Bind(typeof(IResponseResult)).To(typeof(ResponseResult<>)); 
+1

IResponseResult没有泛型类型参数。但ResponseResult确实有,并且您不指定要将其绑定到哪个人。 – treze 2013-04-21 14:25:06

回答