Tôi đang làm việc trên một dự án ASP.NET Web API trong C# cho một giao diện JSON cho một ứng dụng di động. Ý tưởng của tôi là tạo giao diện cho tất cả các yêu cầu và sau đó chỉ sử dụng các giao diện này trong mã API Web.Sự tiêm phụ thuộc vào các tham số phương thức hành động ASP.NET Web API
tôi đã kết thúc với một cái gì đó như thế này:
public interface IApiObject {}
public interface IApiResponse<T> : IApiObject where T : IApiObject {}
public interface IApiRegistrationRequest : IApiObject {}
điều khiển của tôi trông như thế này:
public class MyApiController : ApiController
{
public IApiResponse<IApiObject> Register(IApiRegistrationRequest request) {
// do some stuff
}
}
dự án Web API của tôi cũng chứa hiện thực của các giao diện.
Tôi cho rằng các dự án API Web sử dụng mô hình ràng buộc như dự án MVC, vì vậy tôi đã tạo một inheritance aware ModelBinderProvider để cung cấp một chất kết dính cho tất cả các IApiObject và một bộ mô hình tùy chỉnh sử dụng một thùng chứa Unity để giải quyết các giao diện.
Tuy nhiên, sau khi điều tra thêm, tôi đã xem qua How Web API does parameter binding và phát hiện ra rằng Web API sử dụng các trình định dạng thay vì các mô hình kết dính cho các loại phức tạp. Bài đăng trên blog được liên kết đề xuất sử dụng một ModelBinderAttribute trên các tham số hành động của tôi, nhưng thuộc tính đó chỉ chấp nhận một kiểu làm tham số. Tuy nhiên, trình mô hình tùy chỉnh của tôi không chứa một hàm tạo rỗng (nó cần một thùng chứa thống nhất), vì vậy tôi sẽ cần phải chuyển một thể hiện của nó.
Cách khác tôi có thể nghĩ là sử dụng tính năng tiêm phụ thuộc cho các trình định dạng. Thật không may, tôi không quen với họ như tôi chưa bao giờ sử dụng chúng trước đây.
Cách nào phù hợp để đi? Và làm thế nào để tôi làm điều đó?
Cảm ơn, điều này có vẻ thú vị, nhưng tôi không thể dễ dàng thay đổi công nghệ ngay bây giờ. – Chris