Tôi hiện đang làm việc trên một dự án MVC 3 sử dụng Ninject làm DI của tôi, các đối tượng nghiệp vụ được lưu trữ trong một hội đồng riêng biệt. Tôi đang chạy vào một vấn đề với các thông số điều khiển, khi đăng lại cho các hoạt động CRUD tôi nhận được lỗi "Không thể tạo ra một thể hiện của một giao diện". Tôi biết rằng bạn không thể tạo ra một thể hiện của một giao diện, nhưng nó có vẻ như cách duy nhất tôi có thể có được xung quanh này là sử dụng một mô hình tùy chỉnh chất kết dính và vượt qua FormCollection thông qua. Điều này có vẻ thực sự lộn xộn và tôi muốn giữ nhiều loại mã cụ thể ra khỏi dự án như tôi có thể - do đó giao diện ở khắp mọi nơi và Ninject đến DI concretes. Việc ràng buộc mô hình tùy chỉnh không chỉ có vẻ lộn xộn - tôi cũng sẽ không mất DataAnnotations của mình?Thực thể chuyển MVC 3 làm Giao diện
Một số mã để mô tả những gì tôi có:
public ActionResult Create()
{
// I'm thinking of using a factory pattern for this part
var objectToCreate = new ConcereteType();
return (objectToEdit);
}
[HttpPost]
public ActionResult Create(IRecord record)
{
// check model and pass to repository
if (ModelState.IsValue)
{
_repository.Create(record);
return View();
}
return View(record);
}
Có ai chạy vào trong này trước đây chưa? Làm thế nào bạn vượt qua nó?
Cảm ơn!
Tôi sẽ không phá vỡ quy tắc khớp nối lỏng lẻo? Điều gì sẽ xảy ra nếu tôi muốn/phải thay đổi tên của phương pháp cụ thể của mình vì một lý do nào đó tức là Bản ghi trở thành RecordDifferent. Tôi có thể có RecordDifferent thực hiện IRecord và thay đổi DI của tôi để bây giờ tiêm RecordDifferent trong mọi trường hợp của IRecord. –
Tôi đặt trước để sử dụng các lớp cho vùng chứa mô hình và kế thừa hơn là giao diện. Theo mặc định, DI không được sử dụng để tạo các đối tượng được truyền cho các hành động. Tôi không sử dụng DI chỉ vì logic thực sự không phải cho các thùng chứa dữ liệu – Novakov
Không thực sự hiểu ý của bạn ban đầu, nhưng đã tiến triển một chút với dự án này, bây giờ tôi nhận ra rằng tôi đang cố gắng "tách" các thùng chứa dữ liệu đơn giản như bạn đã nói. Không có hành vi (chưa) trong bất kỳ đối tượng POCO nào ánh xạ một bảng cơ sở dữ liệu và do đó không có lý do gì để giao tiếp với các đối tượng này - cũng như không sử dụng một nhà máy để khởi tạo chúng. Tôi đoán những gì tôi đã có sự hiểu biết vấn đề là tách nên thực sự được sử dụng cho các đối tượng có hành vi hơn là chỉ các thuộc tính dữ liệu. –