2009-07-24 26 views
5

Tôi đã đọc một nơi nào đó NHibernate 2.1 hỗ trợ xây dựng phụ thuộc tiêm cho nó entites.Constructor phụ thuộc tiêm với NHibernate 2.1 và StructureMap

Tôi làm cách nào để định cấu hình Sơ đồ cấu trúc và NHibnerate 2.1 để thiết lập và chạy ứng dụng này?

+0

Nhận bất cứ đâu với điều này? Tôi cũng đang tìm cách tiêm phụ thuộc vào thực thể của tôi với sm. –

+0

Không, tôi nghĩ rằng tôi đã giải quyết vấn đề này bằng cách xem xét lại vấn đề và tránh tiêm phụ thuộc :) – BjartN

Trả lời

0

Bằng cách thiết lập StructureMap trên tất cả các thực thể của bạn (các lớp vv) và sau đó sử dụng giao diện cho mỗi người như chữ ký cho hàm tạo của lớp ... khi bạn khởi tạo lớp có phụ thuộc trong hàm tạo của nó StructureMap sẽ tự động tiêm nó cho bạn!

[PluginFamily("Default")] 
public interface IWidget1 

[Pluggable("Default")] 
public class Widget1 : IWidget1 

[PluginFamily("Default")] 
public interface IAnotherWidget 

[Pluggable("Default")] 
public class AnotherWidget : IAnotherWidget 
{ 
    public AnotherWidget(IWidget widget) 
    { 
     ... 
    } 
} 

IAnotherWidget _anotherWidget = ObjectFactory.GetInstance<IAnotherWidget>(); 

Điều gì đó tương tự!

Điều này có thể được sử dụng quá: Can I replace the call to Activator.CreateInstance() in NHibernate?

Và đây: http://devlicio.us/blogs/billy_mccafferty/archive/2007/02/05/inject-di-container-into-domain-objects-with-nhibernate.aspx

2

Tôi nhận ra đây là một câu hỏi cũ, nhưng trong trường hợp nó có thể có ích.

CHỈNH SỬA: Các liên kết được đăng ban đầu không hiệu quả đối với NHib 2.1, tìm thấy thông tin tốt hơn.

Đối với NHibernate 2.1, bạn có thể tạo Bộ chặn và ghi đè phương pháp Instantiate và để vùng chứa của bạn tạo các phiên bản tại đó. Here is an example

Nếu bạn muốn thay thế thuộc tính, bạn có thể sử dụng kỹ thuật tương tự nhưng thay vào đó, hãy thực hiện công việc của bạn trong phương thức onLoad.

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