Tôi đang sử dụng Castle Windsor cho SL v2.5.1.0. Tôi có nó lớp proxy bên trong (các giao diện được công khai tất nhiên, nhưng việc thực hiện là nội bộ, để người tiêu dùng chỉ nhận thức được giao diện).Castle Windsor InternalsVisibleTo Silverlight
Tôi đang sử dụng các thuộc tính sau trong lắp ráp của tôi với các lớp nội
[assembly: InternalsVisibleTo("Castle.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("Castle.Windsor, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Trong chế độ toàn .NET 4.0, với .NET 4.0 lắp ráp Lâu đài, điều này hoạt động tốt và các loại tôi đang proxy OK. Trong Silverlight, với các hội đồng Silverlight Castle, tôi nhận được: dường như
Type ConsoleApplication4.MyTypeToBeProxied is not public. Can not create proxy for types that are not accessible.
Ngoài ra, chỉ trong xử lý sự cố các vấn đề, thêm dòng sau vào làm cho không có sự khác biệt ...:
[assembly: InternalsVisibleTo("System.Core, PublicKey=00000000000000000400000000000000")]
[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
và tôi đã cũng được xác minh tại thời điểm chạy mà tên của hội đồng được lưu trữ động trong SL vẫn còn trong thực tế DynamicProxyGenAssembly2.
Bất kỳ ý tưởng nào? Cảm ơn.
EDIT:
tôi thấy vấn đề tôi nghĩ:
Castle cho .NET 4.0 có:
private bool IsAccessible(Type target)
{
// ....
return ((target.IsPublic || target.IsNestedPublic) || internalAndVisibleToDynProxy);
}
trong DefaultProxyBuilder ... và SL 4 có
private bool IsAccessible(Type target)
{
target.IsNested();
return (target.IsPublic || target.IsNestedPublic);
}
Đây có phải là thứ có thể được khắc phục trong C astle source? Hoặc tôi cần phải/tôi nên sub-class DefaultProxyFactory?
Hmm thú vị - vì vậy tôi cho rằng sự khác biệt quan trọng ở đây có thể là bạn ký hợp đồng được tạo ra với cùng khóa như cụm của riêng bạn, trong khi bình thường nếu DP tạo ra tên lắp ráp mạnh, nó được ký bằng khóa của Castle. Vì vậy, tôi ** đoán ** rằng có lẽ quy tắc là bạn có thể sử dụng kiểu nội bộ từ assembly A trong assebly B nếu A có B là bạn và cả hai đều được ký với cùng một khóa. –
Cảm ơn bạn đã điều tra - hãy đặt điều này trong trình theo dõi vấn đề và chúng tôi sẽ xem xét việc nướng nó trong vNext. –
Cảm ơn bạn đã theo dõi nhanh! – Jeff