2013-01-19 26 views
5

Có cách nào, với EF6, để tiêm trình tạo đối tượng tùy chỉnh đối tượng không? Những gì tôi cần làm là cung cấp các thể hiện của các thực thể cho EF trước khi việc matrial xảy ra.Tùy chỉnh thực thể hóa thực thể

về cơ bản tôi muốn có thể xác định thực thể POCO của mình với hàm tạo không tham số, do đó, để có thể sử dụng DI aggreate, thì cuối cùng vẫn tiếp tục với EF.

Tôi đã mà tôi có thể đạt được một cái gì đó tương tự bằng cách sử dụng sự kiện ObjectMaterialized:

var oc = (this as IObjectContextAdapter).ObjectContext; 
oc.ObjectMaterialized += (s, e) => 
{ 
    //resolve and inject dependencies here using e.g. public properties 
}; 

nhưng tôi thực sự rất muốn có phụ thuộc tuyên bố trên các nhà xây dựng.

Bất kỳ ý tưởng nào? Chúc mừng, .m

+0

Nếu tôi có thể hỏi, bạn muốn tiêm phụ thuộc vào loại phụ thuộc nào? –

+0

về cơ bản các dịch vụ miền trong mô hình miền của tôi được tổng hợp. Tôi đến từ kinh nghiệm MongoDB và RavenDB, nơi có một mô hình miền tồn tại trên lưu trữ thực sự dễ dàng và việc tiêm dependencis vào thời gian deserialization thực sự dễ dàng, vì vậy tôi muốn thực hiện nếu tôi có thể có cùng sự hỗ trợ với EF6 (alfa2 hiện tại). về cơ bản tôi đang cố gắng tìm cách để nói với EF sử dụng thùng chứa của tôi để giải quyết các thực thể, hoặc ít nhất là hỏi tôi cách giải quyết các thực thể :-) –

Trả lời

4

Sử dụng ObjectContext mặc định, tôi không tin điều này là có thể khi xem mã EF. Cuối cùng, các đối tượng được tạo bởi ObjectContext.CreateObject. Điều này làm một trong hai điều: Nó hoặc là một constructor mặc định hoặc khác, nếu tạo proxy được kích hoạt, nó tạo ra loại proxy có liên quan. Các loại proxy được sử dụng để theo dõi thay đổi nâng cao và cho các thuộc tính tải lười.

Tuy nhiên, ObjectContext.CreateObject là ảo, vì vậy, người ta có thể ghi đè nó trong lớp dẫn xuất. Lớp dẫn xuất đó sẽ được cung cấp với tham chiếu đến vùng chứa (hoặc phạm vi toàn thời gian) và sau đó, trong cuộc gọi CreateObject bị ghi đè, điều này sẽ được sử dụng để giải quyết thực thể.

Câu hỏi sau đó trở thành, làm cách nào để xác định loại có nguồn gốc là ObjectContext để sử dụng cho một DbContext? Vâng, có a constructor that takes an instance of the ObjectContext các DbContext nên được sử dụng.

Đây là nơi mà ý tưởng của tôi bắt đầu giảm một chút so với đường ray, vì bản thân số ObjectContext cần to be told về mô hình mà nó đang sử dụng trong chuỗi kết nối. Tôi nghĩ rằng điều này có thể có nghĩa là một cách tiếp cận mã đầu tiên sẽ không hoạt động như mô hình được tạo ra một cách lười biếng và do đó không có sẵn trước khi DbContext được xây dựng. Tuy nhiên, đối với một phương pháp tiếp cận mô hình đầu tiên, có lẽ điều này có thể làm việc?

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