Tôi cũng đã gặp vấn đề này và hiện đang có giải pháp làm việc. Nó tương tự như giải pháp được mô tả ở trên nhưng với một số khác biệt nhỏ và cũng với mã Unity đầy đủ được thêm vào.
Trước tiên, tôi sẽ sử dụng tính năng tiêm tài sản vì lý do được mô tả ở trên và, như trên, tôi sẽ sử dụng phương pháp BuildUp trên Unity để tiêm các thuộc tính vào Bộ lọc đã tạo.
Để thực hiện việc này, tôi có tất cả các Bộ điều khiển của mình kế thừa từ một lớp cơ sở tùy chỉnh mới. Trong lớp cơ sở đó, tôi ghi đè phương thức CreateActionInvoker để thiết lập ActionInvoker tùy chỉnh của riêng mình.
Protected Overrides Function CreateActionInvoker() As System.Web.Mvc.IActionInvoker
Return CustomActionInvoker
End Function
Sau đó, trong CustomActionInvoker, tôi ghi đè phương thức GetFilters.
Protected Overrides Function GetFilters(ByVal controllerContext As ControllerContext, ByVal actionDescriptor As ActionDescriptor) As FilterInfo
Dim info = MyBase.GetFilters(controllerContext, actionDescriptor)
For Each MyAuthorizationFilter In info.AuthorizationFilters
MvcApplication.Container.BuildUp(MyAuthorizationFilter.GetType, MyAuthorizationFilter)
Next
For Each MyActionFilter In info.ActionFilters
MvcApplication.Container.BuildUp(MyActionFilter.GetType, MyActionFilter)
Next
For Each MyResultFilter In info.ResultFilters
MvcApplication.Container.BuildUp(MyResultFilter.GetType, MyResultFilter)
Next
For Each MyExceptionFilter In info.ExceptionFilters
MvcApplication.Container.BuildUp(MyExceptionFilter.GetType, MyExceptionFilter)
Next
Return info
End Function
Ngược lại với những gì được nói ở trên, tôi không thấy rằng việc tích tụ bên trong Vòng lặp cho mỗi gây ra bất kỳ sự cố nào.Tôi cũng đã vượt qua vấn đề ban đầu chỉ có đối tượng được tham chiếu thông qua một giao diện bằng cách sử dụng một trong các tình trạng quá tải khác của phương thức BuildUp có một System.Type cũng như đối tượng hiện có.
Với tất cả các công việc trên, giờ đây tôi có thể đưa các phụ thuộc vào Bộ lọc của tôi.
Bất kỳ nhận xét và suy nghĩ nào được đánh giá cao.
Cheers Mike
Nguồn
2010-05-10 19:01:35
Tôi đã cố gắng giải pháp được tìm thấy trong các bài viết trên blog nhưng có vẻ là một số khác biệt giữa Unity và Ninject, nếu không ở đâu đó, mã của một ai đó là sai :). Các bộ lọc chỉ đọc theo thời gian chúng được ghi đè vào "InvokeExceptionFilters" bị ghi đè. Vì vậy, tôi có thể khai báo một bộ lọc MỚI và chèn phụ thuộc, nhưng nếu tôi cố gắng và tiêm phụ thuộc vào danh sách được cung cấp của ExceptionFilters, không có gì xảy ra. Tôi có thể tạo bộ lọc mới và chuyển nó lên lớp cơ sở, nhưng sau đó tôi sẽ mất tất cả thông tin khai báo được cung cấp trên chính thuộc tính. –