Gần đây tôi đã hỏi về cách thực hiện đúng DI và có một số liên kết đến các bài đăng trên blog về nó. Tôi nghĩ giờ đây tôi đã hiểu rõ hơn - xây dựng đối tượng riêng biệt từ logic, bằng cách đặt nó vào các nhà máy. Nhưng tất cả các ví dụ là dành cho những thứ như trang web, và nói để làm tất cả các hệ thống dây điện lúc khởi động. Gọi một nhà máy lớn có tất cả mọi thứ và đi qua trong tất cả các phụ thuộc của new
.Khi nào và ở đâu để gọi các nhà máy trong thời gian chạy?
Nhưng nếu tôi không muốn khởi tạo mọi thứ ở phía trước thì sao? Tôi có một đối tượng có chứa một danh sách các đối tượng khác mà nó có thể ủy nhiệm, nhưng chúng đắt tiền và được sử dụng cùng một lúc, vì vậy tôi xây dựng chúng khi cần và để chúng được thu thập khi tôi hoàn thành. Tôi không muốn đặt new B()
bên trong logic của A
vì tôi thà dùng DI - nhưng làm cách nào? Có thể A
gọi cho nhà máy? Điều đó dường như không tốt hơn nhiều, trừ khi nhà máy duy trì trạng thái bao gồm cả các phụ thuộc hiện tại. Tôi chỉ không muốn chuyển toàn bộ danh sách B
s vào A
khi nó được xây dựng, vì nó sẽ lãng phí. Nếu bạn muốn, B
không nhất thiết có để được bên A
, mặc dù nó có ý nghĩa logic (A
là cấp độ trò chơi, B
là một màn hình duy nhất), nhưng trong mọi trường hợp logic của A
dictates khi B
được tạo ra.
Vì vậy, ai gọi cho nhà máy để nhận B
và khi nào?
Làm rõ: Tôi không sử dụng khuôn khổ cho DI. Tôi tự hỏi, nếu thuật ngữ DI ngụ ý điều đó?
Great câu hỏi. Tôi cũng bị bối rối bởi vấn đề này. Ngoài ra, đôi khi tôi muốn nhiều instantiations của một cái gì đó (và một số tùy ý của họ lúc đó!) Và đã rất bối rối như thế nào đó là nghĩa vụ phải làm việc. Với Ninject tôi đã hút nó lên và tiêm vào 'IKernel' nhưng tôi được cho là đã hiểu được điều đó. (mặc dù theo kinh nghiệm của tôi, rất mạnh mẽ và chưa hối tiếc - và không, tôi thậm chí còn không quan tâm đến việc "trao đổi" khung DI của tôi, vì vậy lợi ích đó đang khắc phục tôi) –
có một số hiểu biết sâu sắc về các mẫu. Trong khi tôi sẽ không đi lang thang hoang dã, nơi mọi loại biết về IKernel, hoặc bất cứ điều gì được gọi là trong hương vị của bạn DI framework, đôi khi đó là cách tốt nhất để đi. Tôi đã làm điều này là tốt, và không có gì phát nổ trên tôi. – Andy