2011-09-29 37 views
7

Tôi nghĩ rằng những gì tôi đang tìm kiếm là một cái gì đó rất đơn giản, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào. Tôi muốn sử dụng Ninject để tạo ra một đối tượng bằng cách Ninject gọi một phương thức nhà máy với thông số cụ thể và không được tiêm trong thời gian yêu cầu thực tế để nhanh chóng các đối tượng:Giao diện ràng buộc qua ToMethod với phương thức có tham số

Yêu cầu cho một đối tượng ở đây:

StandardKernel.Get<ISomeInteface>(new Ninject.Parameters.Parameter("dataContext", dataContext, true)); 

Và tôi muốn ánh xạ ISomeInterface đến một phương thức đang chờ một giá trị được truyền cho nó khi chạy.

Lập bản đồ một giao diện ở đây:

Kernel.Bind<ISomeInterface>().ToMethod(SomeObject.Create(--> `what do I put here?`)); 

Đây có phải là có thể? Nếu vậy, làm cách nào để ánh xạ chính xác giao diện của tôi? Cảm ơn!

Trả lời

6
ToMethod(ctx => 
    SomeObject.Create(
     (IDataContext)ctx.Parameters.Single(p =>p.Name == "dataContext") 
     .GetValue(ctx, null)) 

Nhưng bạn nên suy nghĩ lại về thiết kế của mình để tránh gọi Get từ bất kỳ nơi nào khác ngoài gốc ghép.

+0

Cảm ơn bạn đã trả lời! Thật không may, mã không biên dịch. Và có, tôi đang lập kế hoạch gọi phương thức nhà máy từ gốc ghép .. có một hệ thống phân cấp thừa kế cho những người đó (vì có rất nhiều người trong số họ) và tôi có một nhà máy duy nhất cho tất cả họ sử dụng – Igorek

+0

trình biên dịch đang gặp sự cố chuyển đổi giữa đối tượng Parameter và đối tượng IDataContext của tôi mà hàm Create() mất – Igorek

+0

Sry I forgott để thêm câu trả lời .GetValue() được cập nhật –

Các vấn đề liên quan