2012-04-04 21 views
5

Tôi đã tự hỏi liệu có bất kỳ hỗ trợ nào cho AOP (Lập trình hướng Aspect) cùng với MonoTouch (và do đó với MonoDevelop) hay không.AOP với MonoTouch

Cho đến nay tôi không thể tìm thấy bất kỳ công cụ nào hỗ trợ MonoDevelop. Theo như tôi thấy, các công cụ như PostSharp không được hỗ trợ.

Trả lời

3

Tôi có thể tải PostSharp làm việc trên Mono cho Android (với Visual Studio). Tôi đã không sử dụng MonoTouch, nhưng bạn có thể thử lại: http://mgroves.com/monodroid-with-postsharp/

+1

Đó là vì bạn có thể sử dụng DLL Silverlight; Tôi (nghĩ) không thể tham khảo DLL này trong MonoDevelop trong một dự án Monotouch. –

2

Công cụ không phụ thuộc vào việc tạo mã động nên hoạt động với MonoTouch. IIRC PostSharp là công cụ như vậy - tức là công cụ sửa đổi IL để nhận kết quả.

Lý do nó hạn chế hơn đối với MonoTouch (so với các nền tảng .NET khác, bao gồm Mono cho Android) là iOS không cho phép tạo mã để chúng tôi không thể JIT trên thiết bị. Điều này có nghĩa là tất cả ứng dụng MonoTouch phải được biên dịch AOT (trước thời hạn).

Lưu ý rằng công cụ có thể hoạt động không có nghĩa là nó sẽ hoạt động. Ví dụ. các công cụ phải có khả năng được thực thi trên OSX và bạn cần tích hợp nó vào bản dựng (sau khi biên dịch C# nhưng trước khi biên dịch AOT). Sau này có thể yêu cầu bạn sử dụng script/Makefile để xây dựng dự án của bạn.

2

Gần đây tôi đã tạo một phụ đề Fody được gọi là StaticProxy.Fody, thời gian biên dịch dệt mã chặn vào một lớp và cũng có thể tự động triển khai giao diện. Đây là nhiều hơn hoặc ít hơn những gì ví dụ như lâu đài năng động proxy "giao diện proxy mà không có mục tiêu" và "giao diện proxy với mục tiêu" và "lớp proxy" cung cấp. Tuy nhiên, lưu ý rằng nó bị giới hạn ở chỗ bạn cần đánh dấu các giao diện/lớp cần được dệt bởi thuộc tính [StaticProxy]. Vì vậy, bạn chỉ có thể đánh chặn các loại mà bạn có thể thêm này (==> nguồn dưới sự kiểm soát của bạn).

Ngoài ra, vì nó thêm một đối số hàm tạo nên việc sử dụng thùng chứa phụ thuộc là bắt buộc cơ bản (nó ngắt "các lệnh gọi Foo (..)" mới). Tôi đã tạo mở rộng cho sự hiệp nhất Ninject và:

gói NuGet có sẵn và tôi sẽ rất hoan nghênh nếu ai đó có thể kiểm tra MonoTouch/MonoDroid hội nhập. Tôi sợ rằng tôi hiện không tạo đúng gói nuget.

Tôi cũng đang lên kế hoạch thêm các triển khai tự động tại nhà máy (như liên kết ".ToFactory()" của ninject).