2010-04-23 25 views
25

Chúng tôi có một kịch bản mà người dùng có thể chọn giữa các phần cứng khác nhau khi chạy. Trong nền, chúng tôi có một số lớp phần cứng khác nhau, tất cả đều triển khai giao diện IHardware. Chúng tôi muốn sử dụng Unity để đăng ký cá thể phần cứng hiện đang được chọn cho giao diện này. Tuy nhiên, khi người dùng chọn một phần cứng khác, điều này sẽ yêu cầu chúng tôi thay thế đăng ký này khi chạy.Unity: Thay thế loại đăng ký với loại khác tại thời gian chạy

Ví dụ sau đây có thể làm cho điều này rõ ràng hơn:

public interface IHardware 
{ 
    // some methods... 
} 

public class HardwareA : IHardware 
{ 
    // ... 
} 

public class HardwareB : IHardware 
{ 
    // ... 
} 


container.RegisterInstance<IHardware>(new HardwareA()); 

// user selects new hardware somewhere in the configuration... 

// the following is invalid code, but can it be achieved another way? 
container.ReplaceInstance<IHardware>(new HardwareB()); 

thể hành vi này thể đạt được bằng cách nào đó?

BTW: Tôi hoàn toàn biết rằng các trường hợp đã được giải quyết từ vùng chứa sẽ không được thay thế bằng các phiên bản mới, tất nhiên. Chúng tôi sẽ tự chăm sóc bản thân bằng cách buộc họ giải quyết vấn đề một lần nữa.

Trả lời

37

Phương thức RegisterInstance của UnityContainer sẽ luôn ghi đè mục đăng ký cuối cùng nếu bạn không phân biệt chúng theo tên.

Vì vậy, nếu bạn gọi

container.RegisterInstance<IHardware>(new HardwareB()); 

bạn sẽ ghi đè lên đăng ký cho giao diện IHardware và sẽ truy xuất HardwareB trên giải quyết nỗ lực tiếp theo

+0

Đó là mát mẻ, không biết/cố gắng đó. Cảm ơn rất nhiều! – gehho

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