2013-06-04 28 views
39

Bất cứ ai có thể cho tôi biết nếu tôi có thể đăng ký một cá thể đã tạo của một lớp với Ninject để nó sẽ sử dụng cá thể này mọi lúc cần tiêm?Ninject: Đăng ký một cá thể đã tạo với Ninject?

Tôi cho rằng bạn có thể gọi nó là singleton nhưng tôi đã tạo cá thể. Tất cả các điểm tài liệu để tạo ra các cá thể mới của một lớp.

+0

.InSingletonScope() là những gì bạn đang sau. Nó tạo ra một cá thể duy nhất và đấm nó vào mọi thứ cần nó, bởi vì đó là cách nó cuộn. –

+3

Cảm ơn, nhưng InSingleScope tạo ra cá thể, tôi đã có thể hiện, nó đã được khởi tạo với một vài thuộc tính .... vì vậy tôi cần phải đăng ký cá thể cụ thể đó ... Bạn có ví dụ không? – Martin

+0

Hãy nhớ rằng, bạn nên xây dựng biểu đồ phụ thuộc, bạn không nên tạo mới bất kỳ đối tượng nào, vùng chứa nên biết về tất cả trước khi ứng dụng của bạn chạy, vì vậy nếu bạn đang tạo mới đối tượng và sau đó muốn tham chiếu bằng cách nào đó khu vực khác của ứng dụng của bạn, có vẻ như một số kiểu chống mẫu như Service Locator, trong đó bạn sẽ lấy các cá thể từ Kernel ở khắp mọi nơi. Trừ khi tôi hiểu lầm điều gì đó, xin lỗi nếu tôi là :) –

Trả lời

57

Bạn có thể sử dụng phương thức ToConstant có phiên bản đã tồn tại và đăng ký nó dưới dạng singleton.

var kernel = new StandardKernel(); 
kernel.Bind<MyClass>().ToConstant(myClassInstance); 

Nếu bạn muốn một cái gì đó phức tạp hơn bạn có thể sử dụng ToMethod (nơi bạn có thể sử dụng một Func để có được ví dụ của bạn) kết hợp với InSingletonScope

var kernel = new StandardKernel(); 
kernel.Bind<MyClass>().ToMethod(context => myClassInstance).InSingletonScope(); 
+1

Tốt, trong trường hợp nào một người nào đó sẽ ràng buộc một cá thể chưa được tạo ra trong một số NinjectModule? Có vẻ hơi lạ với tôi, trừ khi các ràng buộc không thể được thực hiện vì lý do nào đó vào đầu của ứng dụng và có thể yêu cầu một số thủ đoạn được thực hiện ở nơi khác. Không bao giờ được sử dụng .ToConstant, có vẻ hữu ích cho các tình huống khó khăn :) –

+0

Hi patrick, tôi có một thể hiện của một đối tượng đã cho tôi một sự khởi đầu của ứng dụng bởi một thành phần của bên thứ ba, trường hợp này là dân cư với tài sản, nếu tôi chỉ đơn giản là mới lên đối tượng này hoặc đã có một mô-đun ninject mới nó, mặc dù nó sẽ là một singleton, tôi sẽ không có tất cả các thuộc tính chính xác. Nhưng tôi mở để tư vấn. Tôi hiện đang đi qua trong đối tượng của tôi để xây dựng một mô-đun ninject tôi đã tạo ra và sử dụng ninject để đăng ký hơn ví dụ theo nemesv. – Martin

+2

Điều này sẽ giải quyết vấn đề của bạn vì Martin đã cho bạn một ví dụ tốt về cách đã truyền qua đối tượng được hỗ trợ của bạn :) –

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