2010-02-24 18 views
7

Tôi đang nâng cấp mã từ Autofac 1.4 lên 2.1.10 Ứng viên phát hành.Đăng ký bộ sưu tập trong Autofac 2.1.10 RC

mô-đun đăng ký thực hiện trước đó của tôi như thế này:

builder.RegisterCollection<IExceptionHandler>() 
       .As<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 
builder.Register<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>() 
       .FactoryScoped(); 

Bây giờ, RegisterCollection không có tình trạng quá tải parameterless. Tôi không quan tâm đến việc gán cho nó một cái tên. Giả sử đó là OK để chỉ vượt qua trong null, mã của tôi trông như thế này trong 2.1:

builder.RegisterCollection<IExceptionHandler>(null) 
       .As<IEnumerable<IExceptionHandler>>() 
       .InstancePerDependency(); 
builder.RegisterType<AspNetExceptionHandler>() 
       .As<IExceptionHandler>() 
       .MemberOf<IEnumerable<IExceptionHandler>>(null) 
       .InstancePerDependency(); 

Tuy nhiên, khi tôi biên dịch, tôi nhận được lỗi sau về .MemberOf:

Sử dụng phương pháp chung ' Autofac.RegistrationExtensions.MemberOf (Autofac.Builder.RegistrationBuilder, string)' đòi hỏi '3' lập luận kiểu

tôi đã thử đặt trong một bộ sưu tập tên thay vì null, chỉ trong trường hợp, và điều đó không có hiệu lực.

Cách thích hợp để đăng ký bộ sưu tập trong 2.1 là gì?

Trả lời

6

Như tôi đã hiểu, bạn chỉ cần đăng ký một loạt các loại IExceptionHandler và sau đó khi bạn yêu cầu IEnumerable<IExceptionHandler> Autofac 2 sẽ chỉ chăm sóc mọi thứ cho bạn.

Từ trang NewInV2:

builder.RegisterType<A1>().As<IA>(); 
builder.RegisterType<A2>().As<IA>(); 

var container = builder.Build(); 

// Contains an instance of both A1 and A2 
Assert.AreEqual(2, container.Resolve<IEnumerable<IA>>().Count()); 
+0

Yep, đó là nó :) –

+1

Tôi không biết làm thế nào tôi bị mất rằng trên NewInV2. Cảm ơn, điều đó dường như hoạt động. Tôi tự hỏi, làm cách nào để tạo bộ sưu tập có tên nếu tôi * muốn *. – HackedByChinese

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