मैं एसएल v2.5.1.0 के लिए कैसल विंडसर का उपयोग कर रहा हूं। मेरे पास यह प्रॉक्सी आंतरिक वर्ग है (इंटरफेस निश्चित रूप से सार्वजनिक हैं, लेकिन कार्यान्वयन आंतरिक है, ताकि उपभोक्ता केवल इंटरफ़ेस से अवगत हो)।कैसल विंडसर आंतरिक दृश्य सिल्वरलाइट
मैं .NET 4.0 कैसल विधानसभाओं के साथ आंतरिक कक्षाएं
[assembly: InternalsVisibleTo("Castle.Core, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("Castle.Windsor, PublicKey=002400000480000094000000060200000024000052534131000400000100010077F5E87030DADCCCE6902C6ADAB7A987BD69CB5819991531F560785EACFC89B6FCDDF6BB2A00743A7194E454C0273447FC6EEC36474BA8E5A3823147D214298E4F9A631B1AFEE1A51FFEAE4672D498F14B000E3D321453CDD8AC064DE7E1CF4D222B7E81F54D4FD46725370D702A05B48738CC29D09228F1AA722AE1A9CA02FB")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
पूर्ण .NET 4.0 मोड में, के साथ अपने विधानसभा में निम्न विशेषताओं का उपयोग कर रहा है, इस ठीक काम करता है और मेरे प्रकार ठीक प्रॉक्सी कर रहे हैं। सिल्वरलाइट में, सिल्वरलाइट कैसल विधानसभाओं के साथ, मैं मिलता है:
Type ConsoleApplication4.MyTypeToBeProxied is not public. Can not create proxy for types that are not accessible.
इसके अलावा, बस समस्या निवारण करते समय, जोड़ने में निम्नलिखित कोई फर्क लगता है ...:
[assembly: InternalsVisibleTo("System.Core, PublicKey=00000000000000000400000000000000")]
[assembly: InternalsVisibleTo("System.Core, PublicKey=" +
"00240000048000009400000006020000002400005253413100040000010001008d56c76f9e8649" +
"383049f383c44be0ec204181822a6c31cf5eb7ef486944d032188ea1d3920763712ccb12d75fb7" +
"7e9811149e6148e5d32fbaab37611c1878ddc19e20ef135d0cb2cff2bfec3d115810c3d9069638" +
"fe4be215dbf795861920e5ab6f7db2e2ceef136ac23d5dd2bf031700aec232f6c6b1c785b4305c" +
"123b37ab")]
और मैंने रनटाइम पर भी सत्यापित किया गया है कि एसएल में गतिशील रूप से होस्ट की गई असेंबली का नाम अभी भी डायनामिकप्रॉक्सिजेनएस्परब्स 2 है।
कोई विचार? धन्यवाद।
संपादित:
मैं इस समस्या मुझे लगता है कि पाया: .NET 4.0 के लिए
कैसल है:
private bool IsAccessible(Type target)
{
// ....
return ((target.IsPublic || target.IsNestedPublic) || internalAndVisibleToDynProxy);
}
DefaultProxyBuilder में
... और SL 4
हैprivate bool IsAccessible(Type target)
{
target.IsNested();
return (target.IsPublic || target.IsNestedPublic);
}
क्या यह कुछ है जो सी में तय किया जा सकता है अस्थिर स्रोत? या क्या मुझे डिफॉल्टप्रोक्सी फैक्ट्री को उप-श्रेणी की आवश्यकता है?
हम्म दिलचस्प - इसलिए मुझे लगता है कि यहां महत्वपूर्ण अंतर यह हो सकता है कि आप जेनरेटेड असेंबली को अपने स्वयं के असेंबली के समान कुंजी के साथ साइन करें, जबकि आम तौर पर यदि डीपी दृढ़ता से नामित असेंबली उत्पन्न करता है तो इसे कैसल की कुंजी के साथ हस्ताक्षरित किया जाता है। तो मैं ** अनुमान लगा रहा हूं ** शायद नियम यह है कि आप एस्सेबली बी में असेंबली ए से आंतरिक प्रकार का उपयोग कर सकते हैं यदि ए के पास मित्र के रूप में बी है और दोनों एक ही कुंजी के साथ हस्ताक्षरित हैं। –
इसकी जांच के लिए धन्यवाद - इसे जारी करने वाले ट्रैकर में रखें और हम इसे vNext के लिए बेकिंग में देखेंगे। –
त्वरित अनुवर्ती के लिए धन्यवाद! – Jeff