2012-02-29 21 views
5

Tôi cần phải trỏ đến một phương thức trong các liên kết Ninject như là một phần của đối số hàm tạo. Nhà xây dựng cho lớp học trông giống như sau:Thẻ Ninject Pass được ủy quyền vào WithConstructorArgument

MyObject(Func<Populator> param1, TimeSpan time) 

Tôi đã tìm kiếm và chưa tìm được cách để ràng buộc đại biểu cho Func. Điều này thậm chí có thể? Ninject sẽ không cho phép tôi làm điều này bởi vì nó mong đợi một đối tượng như một đối số, và sẽ không có một đại biểu.

Bind<IInterface>() 
     .To<MyObject>() 
     .InSingletonScope() 
     .WithConstructorArgument 
      ("param1", ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod) 
     .WithConstructorArgument 
      ("time", new TimeSpan(0,30,0)); 

Có cách nào để ứng xử này hoạt động trong Ninject không?

+1

rằng quá tải dường như là một chức năng gọi lại. Nếu bạn đã làm gì() => Kernel.Get (). PopMethod'? – dotjoe

+0

Không có xúc xắc, có dây nó trong như '() => Kernel.Get (). PopMethod' Nhìn vào chữ ký phương pháp WithConstructorArgument cho điều này, Func hy vọng một đối tượng được trả về, và tôi cần phải trả về một Func để thông số. Có lẽ có một cách khác xung quanh điều này? –

+0

là 'PopMethod' một thuộc tính của kiểu' Populator'? – dotjoe

Trả lời

3

Bạn có thể định nghĩa một ràng buộc như thế này:

Bind<Func<Populator>>().ToMethod(ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod); 
Các vấn đề liên quan