2012-03-09 26 views
7

Tôi đang xuất khẩu một số lớp thực hiện các giao diện IFoo như thế nàyNhập khẩu nhiều trường hợp sử dụng MEF

public interface IFoo { } 

[Export("A", typeof(IFoo))] 
public class Foo1 : IFoo { } 

[Export("B", typeof(IFoo))] 
public class Foo2 : IFoo { } 

Khi tôi cố gắng nhập một trong số họ sử dụng

containter.GetExportedValue<IFoo>("A"); 

nó hoạt động tốt nhưng khi tôi cố gắng để nhập tất cả chúng như thế này

[ImportMany] 
IFoo[] foos; 

nó không hoạt động.

Ai đó có thể cho tôi biết cách giải quyết vấn đề này không?

+0

Câu hỏi - nên không phải là tài sản có lợi; bộ; ? – labroo

Trả lời

9

Để có nó cả hai cách, kê khai 2 xuất khẩu:

public interface IFoo { } 

[Export(typeof(IFoo))] 
[Export("A", typeof(IFoo))] 
public class Foo1 : IFoo { } 

[Export(typeof(IFoo))] 
[Export("B", typeof(IFoo))] 
public class Foo2 : IFoo { } 

Sau đó, nó nên làm việc (tôi đã làm một mẫu thử nghiệm và nhận được nó để làm việc).

HTH,

Bab.

+0

Xin chào @Baboon, tôi nghĩ rằng việc sử dụng [Xuất (chuỗi, Loại)] sẽ xuất cả hai cùng một lúc. – Michelle

+0

Công trình này đẹp mắt. Ngoài ra, nếu bạn bỏ qua tên trên một trong các lần xuất, điều này sẽ trở thành mặc định, điều này thực sự hữu ích để bỏ qua một số loại phụ thuộc vòng tròn nhất định. – Contango

+0

có cách nào tôi có thể thực hiện [ImportMany] và vẫn nhận được tên hợp đồng không? –

3

Xóa tên hợp đồng trên hàng xuất của bạn.

[Export("A", typeof(IFoo))] 

Để

[Export(typeof(IFoo))] 

Trong kịch bản đầu tiên bạn xuất khẩu một hợp đồng phù hợp với tên "A" và loại IFoo, trong khi nhập khẩu của nhiều bạn đang nhập tất cả những gì phù hợp với hợp đồng gõ IFoo (không có tên hợp đồng), vì vậy việc xuất khẩu với tên hợp đồng không được xem xét.

Như chú khỉ đầu chó đã đề cập, bạn có thể có cả hai cách. Bạn nên xem xét nếu bạn cần cả hai trong ứng dụng của bạn, nếu nó không phải là trường hợp, tôi sẽ dính chỉ với một cách để giữ cho mọi thứ càng đơn giản càng tốt, nếu không tôi đề nghị sử dụng cách tiếp cận của mình.

+1

Có, nhưng sau đó anh ta không thể nhập chỉ "A" nữa. –

+0

@Baboon: Tôi tự hỏi liệu trong trường hợp này có thể xuất khẩu phần có và không có hợp đồng để sử dụng cả hai loại hàng nhập khẩu. Nhưng tôi không biết nếu nó thực sự cần thiết trong trường hợp này. – Gilles

+0

Hi @Gilles, Baboon là đúng, tôi cần phải sử dụng cả hai cách để nhập chúng. – Michelle

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