Thêm dịch vụ sau khi vùng chứa đã được xây dựng


87

Có thể đăng ký một dịch vụ tại thời điểm chạy, nghĩa là sau khi ContainerBuilderđã được xây dựng và Containerđã được tạo (và ContainerBuilderxử lý) không?


Hiện tại, các phương pháp hay nhất cho biết vùng chứa AutoFac là không thể thay đổi
Ady

Câu trả lời:


96

Có, bạn có thể, bằng cách sử dụng Updatephương pháp trên ContainerBuilder:

var newBuilder = new ContainerBuilder();
newBuilder.Register...;

newBuilder.Update(existingContainer);

2
Xin lưu ý rằng việc cập nhật vùng chứa hiện có đã được sử dụng để giải quyết có thể dẫn đến hành vi không xác định. Ví dụ, việc thay thế các thành phần là phụ thuộc của các singleton đã được phân giải khiến thành phần ban đầu vẫn được tham chiếu.
Steven

13
Bản cập nhật không được dùng nữa github.com/autofac/Autofac/issues/811 .
Chase Florell

19

Vì ContainerBuilder.Update không còn được dùng nữa, nên đề xuất mới là sử dụng phạm vi toàn thời gian con.

Thêm đăng ký vào phạm vi lâu dài

Autofac cho phép bạn thêm đăng ký "nhanh chóng" khi bạn tạo phạm vi trọn đời. Điều này có thể giúp bạn khi bạn cần thực hiện một loại ghi đè đăng ký giới hạn “mối hàn tại chỗ” hoặc nếu bạn thường chỉ cần một số thứ bổ sung trong phạm vi mà bạn không muốn đăng ký toàn cầu. Bạn thực hiện việc này bằng cách chuyển một lambda tới BeginLifetimeScope () lấy ContainerBuilder và thêm các đăng ký.

using(var scope = container.BeginLifetimeScope(
  builder =>
  {
    builder.RegisterType<Override>().As<IService>();
    builder.RegisterModule<MyModule>();
  }))
{
  // The additional registrations will be available
  // only in this lifetime scope.
}

Làm việc với Phạm vi trọn đời


Điều cần lưu ý là comment đó trong khối using. "Các đăng ký bổ sung sẽ chỉ có sẵn trong phạm vi trọn đời này."
Ady
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.