2012-11-27 29 views
9

trong ứng dụng WebViewi Asp.Net MVC 4 của tôi Tôi muốn tải thêm WebApiControllers động vào một thời điểm sau (sau khi khởi tạo WebApi), trong các hội đồng riêng biệt. Hơn nữa tôi muốn thêm các tuyến cho các bộ điều khiển đó khi chạy.ASP.Net WebApi: Cách tải các bộ điều khiển bổ sung tại thời điểm chạy

Tôi tự hỏi, nếu điều này có thể làm được.

Mục tiêu của tôi là xây dựng một ứng dụng web, nơi tôi có thể tải lên bộ điều khiển (các bộ sưu tập đã biên dịch) và các bộ điều khiển sẽ được tự động lưu trữ trong ứng dụng này.

Tôi đã cố gắng đạt được điều đó bằng cách triển khai lớp AssemblyResolver của riêng mình, nhưng (theo như tôi đã thấy), AssemblyResolver được tải một lần ở giai đoạn khởi tạo.

Có thể có tùy chọn "tải lại" tất cả bộ điều khiển.

Mọi trợ giúp sẽ được đánh giá cao!

Marius

+0

http://www.dotnetcurry.com/ShowArticle.aspx?ID=898 Bạn đã thấy điều này. –

+0

Một đồng nghiệp cũ của tôi có một cái gì đó gần giống như làm việc này trong hệ thống của chúng tôi. Tôi biết anh ấy đã kết thúc bằng [MEF] (http://msdn.microsoft.com/en-us/library/dd460648.aspx) để quản lý tải lắp ráp năng động, nhưng tôi không nhớ những chi tiết cụ thể. Tôi đã gửi cho anh ta một liên kết đến bài đăng này, có lẽ anh ấy sẽ liên lạc lại với bạn. Trong thời gian chờ đợi, bạn có thể tự mình tìm ra giải pháp với MEF. – gzak

Trả lời

2

Bạn có thể sử dụng Web API phụ thuộc Resolver:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    void ConfigureApi(HttpConfiguration config) 
    { 
     config.DependencyResolver = new MyDependencyResolver(); 
    } 

    protected void Application_Start() 
    { 
     ConfigureApi(GlobalConfiguration.Configuration); 

     // ... 
    } 
} 

Using the Web API Dependency Resolver

2

Cám ơn câu trả lời của bạn.

I figured it out, nó không thể làm điều đó, vì tất cả các bộ điều khiển được nạp một lần và được lưu trữ trên tất cả các thời gian.

Xem HttpControllerTypeCache trong DefaultHttpControllerSelector phương thức InitializeControllerInfoCache (...).

Trong oder để làm một bộ nhớ cache làm mới, tôi phải thực hiện một HttpControllerSelector tùy chỉnh.

0

gì về nếu trong Global.asax bạn nạp tất cả các cụm trong một thư mục cụ thể và sau đó đã tìm kiếm một lớp mà thực hiện một giao diện cụ thể, ví dụ

trống RegisterControllers (tuyến RouteCollection);

Tạo một thể hiện và sau đó vượt qua trong bộ sưu tập tuyến đường của bạn. Điều này sau đó sẽ đăng ký các tuyến đường bổ sung trong quá trình khởi động trang web.

+0

Xin chào Peter, tôi muốn tự động tải các bộ điều khiển WebAPi bổ sung sau này (khi trang web đang chạy). Tôi biết làm thế nào để tải bộ điều khiển trong global.asax, nhưng điều này xảy ra chỉ một lần - khi khởi động. – Marius

+0

Liệu IIS có khởi động lại ứng dụng web khi bạn thay đổi nội dung của thư mục nhị phân? –

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