2017-07-20 15 views
6

Hiện tại tôi đang xây dựng rất nhiều API nhỏ tại nơi làm việc. Nhiều dự án trong số này chia sẻ một số logic điều khiển cơ bản. Có cách nào để thêm chúng vào một gói nuget và chỉ sử dụng chúng trong khi khởi động?
Ví dụ: như thêm Mvc:Chia sẻ Bộ điều khiển MVC mặc định

IApplicationBuilder app;  
....  

app.UseMvc; 
app.UseBasicApiVersionController(); 

Ý tưởng là chúng tôi có điểm cuối phiên bản trong tất cả các dịch vụ nhỏ của chúng tôi.
Ví dụ:
http://url/version
lợi nhuận { "phiên bản": "1.0.0"}
Làm thế nào tôi làm điều này vào một gói NuGet?
Vì vậy, tất cả các nhà phát triển chỉ phải thêm 1 dòng mã để thêm điểm cuối này vào dịch vụ vi mô của họ? Chúng tôi đang sử dụng lõi dotnet.
Đừng giúp để tạo ra các gói NuGet nó tự :)

Tôi đoán cho việc bắt đầu là một cái gì đó tương tự như sau:

public static IApplicationBuilder UseBasicApiVersionController(this IApplicationBuilder app) 
    { 
     if (app == null) 
     throw new ArgumentNullException("app"); 

     ..... // What should I do? 

     return app; 
    } 

* Chỉnh sửa:
Nếu bạn thêm một điều khiển để NuGet gói dự án nó sẽ được phát hiện tự động. Nhưng đó không phải là chức năng tôi muốn.
Tôi có thể có 10 dịch vụ cần bộ điều khiển đó. Trong khi có 1-2 dịch vụ mà chỉ muốn có logic điều khiển phiên bản khác. Ví dụ. Khách hàng đang đối mặt với ứng dụng không nên có điểm cuối "/ phiên bản".
Đó là lý do tại sao tôi muốn trong khi khởi động để sử dụng app.UseBasicApiVersionController();

+1

Là phương pháp thay thế: điều gì về việc tạo mẫu dự án mặc định với bộ điều khiển mặc định của bạn. Hoặc chỉ là một dự án. Sau đó bạn chỉ có thể sao chép repo và có thể bắt đầu với mọi thứ bạn cần. Bạn thậm chí có thể ngã ba/phân nhánh dự án đó để tạo ra các điểm khởi đầu khác nhau cho các loại dịch vụ nhỏ khác nhau. – Marco

+0

@Marco> Đã nghĩ về điều đó. Nhưng nếu chúng ta trong tương lai thay đổi logic cho cách hoạt động của điểm cuối, thì chúng ta sẽ phải đi vào tất cả các dự án của chúng ta và sửa nó. Ví dụ: Ngay bây giờ chúng tôi chỉ cần số phiên bản. Nhưng sau đó chúng ta có thể cần nhãn: Aplha/beta/release. Nó sẽ được tốt đẹp chỉ có một gói nuget để cập nhật thay vì mở tất cả các dự án di sản và thêm logic mới cho bộ điều khiển mặc định. – Kiksen

+0

Bạn cũng có thể sử dụng tiêm phụ thuộc. Bạn có thể cung cấp lớp trình định dạng url của một số loại chấp nhận tất cả dữ liệu động mà bạn cần để tạo một url máy khách hợp lệ. – Silvermind

Trả lời

0

Nếu chỉ dành cho phiên bản, bạn có thể thêm tiện ích mở rộng dùng chung hoặc một phần phần mềm trung gian trả về phiên bản.

public class VersionMiddleware: OwinMiddleware 
{ 
    private static readonly PathString Path = new PathString("/version"); 
    private OwinMiddleware Next; 

    public VersionMiddleware(OwinMiddleware next) : base(next) 
    { 
     Next = next; 
    } 

    public async override Task Invoke(IOwinContext context) 
    { 

     if (!context.Request.Path.Equals(Path)) 
     { 
      await Next.Invoke(context); 
      return; 
     } 

     var version = Assembly.[HowToGetYourVersionAsAnObject] 

     context.Response.StatusCode = (int)HttpStatusCode.OK; 
     context.Response.ContentType = "application/json"; 
     context.Response.Write(JsonConvert.SerializeObject(responseData)); 
    } 
} 
+0

Ý tưởng là nó phải năng động và được sử dụng cho những thứ khác ngoài phiên bản. Giống như được mô tả trong nhận xét. Nếu tôi trong tương lai muốn trả lại Phiên bản + Nhãn. Hoặc toàn bộ chế độ xem Dao cạo. – Kiksen

+0

Trả lại chế độ xem dao cạo có thể là một khả năng khác. Những người khác chỉ là một số thành phần trung gian. – mhermann

+0

Nhưng bạn là chính xác. Nó không phải là linh hoạt như bộ điều khiển. Câu hỏi đặt ra là liệu nó là một yêu cầu hay thiết kế cho một số yêu cầu tiềm năng của tương lai. – mhermann

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