2010-05-20 26 views
61

Hôm qua tôi đã triển khai mã:IUnityContainer.Resolve <T> ném lỗi tuyên bố nó không thể được sử dụng với các thông số loại

CustomerProductManager productsManager = container.Resolve<CustomerProductManager>(); 

Đó là compilable và làm việc.

Hôm nay (có lẽ tôi đã sửa đổi một cái gì đó) tôi liên tục nhận được lỗi:

The non-generic method 'Microsoft.Practices.Unity.IUnityContainer.Resolve(System.Type, string, params Microsoft.Practices.Unity.ResolverOverride[])' cannot be used with type arguments

đồng nghiệp của tôi có cùng một mã nguồn và không có cùng một lỗi. Tại sao? Làm thế nào để giải quyết vấn đề?

P.S.

dòng "bằng Microsoft.Practices.Unity;" có mặt trong phần sử dụng.

Tôi đã cố gắng để thay thế phiên bản generic với những người không chung một:

CustomerProductManager productsManager = (CustomerProductManager)container.Resolve(typeof(CustomerProductManager)); 

Và có một lỗi:

No overload for method 'Resolve' takes '1' arguments

Nó có vẻ như một trong những cụm không tham chiếu .. nhưng cái nào? Tôi có 2 người trong số họ được tham chiếu: 1. Microsoft.Practices.Unity.dll 2. Microsoft.Practices.ServiceLocation.dll

P.P.S. Tôi đã nhìn thấy vấn đề tương tự http://unity.codeplex.com/WorkItem/View.aspx?WorkItemId=8205 nhưng nó đã được giải quyết là "không phải là một lỗi"

Bất kỳ suy nghĩ sẽ rất hữu ích

+0

Bạn có đang sử dụng Unity 2.0 không? – Vadim

+0

Bạn đã làm cho nó hoạt động chưa? –

+0

Có, tôi đang sử dụng v2.0 – Budda

Trả lời

163

tôi đã cùng một vấn đề và tìm thấy "sửa chữa" nhìn Prism file mẫu mã. Hình như, ngay cả khi nó không phải là một dll trong Unity V2 bạn phải thêm một tham chiếu trong lớp học của bạn để: Microsoft.Practices.Unity

hoàn chỉnh của tôi "sử dụng" phần là như sau

using System; 
using System.Windows; 
using Microsoft.Practices.Composite.Modularity; 
using Microsoft.Practices.Unity; 
using Microsoft.Practices.Composite.UnityExtensions; 

Tôi không chắc chắn nếu bạn đang sử dụng Silverlight, nhưng phiên bản chung cho Container.Resolve IS trong Microsoft.Practices.Unity.

+9

Chính xác. Một số thời gian trước đây tôi đã phát hiện ra rằng thêm 'bằng cách sử dụng Microsoft.Practices.Unity;' giải quyết một vấn đề. – Budda

+0

cảm ơn! điều này đã làm cho tôi! : D –

+1

Điều này cũng làm việc cho tôi, nhưng tính năng chia sẻ lại chết tiệt hiện đang rên rỉ về các chỉ thị sử dụng 'không sử dụng'. – IbrarMumtaz

0

Trong trường hợp của tôi, lớp tôi đã gói với Unity được thừa kế từ lớp cơ sở trừu tượng và lớp cơ sở đó đã làm NOT có một hàm tạo tham số. Một khi tôi thay đổi mã của tôi để sử dụng một constructor parameterless cho lớp cơ sở, vấn đề biến mất.

1

Tôi gặp sự cố này và không có câu trả lời nào trong số này không giúp tôi. Tôi đã nhận được lỗi thời gian biên dịch

Unknown method RegisterType() of Microsoft.Practices.Unity.IUnityContainer

cho mã bên dưới của tôi.

Container.RegisterType<MyInterface, MyClass>();

Tôi thấy rằng nếu bạn đã không thực hiện IMyInterface đến lớp MyClass, bạn nhận được vấn đề này. Hy vọng nó cũng sẽ giải quyết cho bạn ...

0

Trong trường hợp của mình, tôi đã có Bootstrapper thực hiện giải pháp riêng của mình mà không có phiên bản chung, vì vậy nó không thể tìm thấy Unity Resolve của Microsoft. Việc thêm các thông tin phù hợp đã làm được điều đó.

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