2009-05-17 31 views
6

Khi sử dụng tính năng tự động đăng ký với lâu đài windsor Tôi thấy mọi người làm những việc nhưĐăng ký thành thạo Windsor Castle - Chọn gì() làm gì?

_container.Register(
    AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) 
    .WithService.FirstInterface()); 

Đối với cuộc sống của tôi, tôi không thể tìm ra những gì các phương pháp Pick() thực hiện cũng không phải tôi có thể tìm thấy bất kỳ tài liệu. Bất cứ ai có thể giải thích cho tôi?

Trả lời

9

Pick(IEnumerable<Type>)is a synonym forFrom(IEnumerable<Type>), tức là nó chọn các loại được chỉ định làm mục tiêu đăng ký.

AllTypes.Pick()is the same asAllTypes.Of<object>(), do đó, nó có hiệu quả lựa chọn tất cả các loại.

AllTypes.Pick().FromAssembly(Assembly.GetExecutingAssembly()) sẽ chọn ALL loại trong lắp ráp thực hiện (sau đó bạn có thể lọc, tất nhiên)

Như thường lệ, hãy nhìn vào các fluent API wiki và/hoặc test case để biết thêm thông tin.

+1

Mausch - bạn có nghĩ đến việc đóng góp cho tài liệu Castle về giao tiếp thông thạo không? Nó không phải là câu hỏi đầu tiên như thế này bạn trả lời. –

+0

Tôi sẽ thử nó –

2

Đó là loại điểm bắt đầu trong API thông thạo này để chọn loại sẽ tự động được đăng ký trong vùng chứa.

Container.Register(
     AllTypes.Pick() 
     .FromAssemblyNamed("MyAssembly") 
     .If(t => t.Name.EndsWith("ABC")) 
     .Configure(c => c.LifeStyle.Is(LifestyleType.Transient)) 
     .WithService.Select(i => typeof(I)) 
    ); 

Trong ví dụ này tất cả các loại nhặt từ MyAssembly với tên kết thúc bằng "ABC" sẽ được thêm vào container với lối sống thoáng như các dịch vụ của loại I. Ví dụ đến từ this question.

Đây là cách tiếp cận khai báo dưới dạng DSL nội bộ. Với loại API này, các phương thức được sử dụng để sắp xếp cấu hình hành vi sẽ được thực thi sau này. Để đạt được điều này, các phương thức trả về các trình xây dựng hướng dẫn thông qua các bước cấu hình, trong khi công việc thực tế được thực hiện ở cuối.

+0

Vấn đề là ở ví dụ trên, có vẻ như thay vì sử dụng AllTypes.Pick() FromAssemblyNamed (...). Nếu (..) bạn có thể làm ngắn hơn và chuẩn hóa hơn AllTypes.FromAssemblyNamed (...). Ở đâu (..) –

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