castle.dynamicproxy2 2.1.0.0 → 2.2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+ Apache License, Version 2.0
2
+
3
+ Apache License
4
+ Version 2.0, January 2004
5
+ http://www.apache.org/licenses/
6
+
7
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
8
+
9
+ 1. Definitions.
10
+
11
+ "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
16
+
17
+ "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
18
+
19
+ "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
20
+
21
+ "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
22
+
23
+ "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
24
+
25
+ "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
26
+
27
+ "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
28
+
29
+ "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
30
+
31
+ 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
32
+
33
+ 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
34
+
35
+ 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
36
+
37
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
38
+
39
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
40
+
41
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
42
+
43
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
44
+
45
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
46
+
47
+ 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
48
+
49
+ 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
50
+
51
+ 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
52
+
53
+ 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
54
+
55
+ 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
56
+
57
+ END OF TERMS AND CONDITIONS
@@ -0,0 +1,80 @@
1
+ This file names who's behind the Castle Team. You can find more about us at http://www.castleproject.org/community/team.html
2
+
3
+ Committers
4
+ ==========
5
+ (ordered by the date when joined the project)
6
+
7
+ - hammett/Hamilton Verissimo
8
+ - Henry Concei��o
9
+ - Kevin Williams
10
+ - Craig Neuwirt
11
+ - Gilles Bayon
12
+ - Andrew Hallock
13
+ - Jason Nelson
14
+ - Dru Sellers
15
+ - John Morales
16
+ - CobraLord
17
+ - Dan
18
+ - Tatham Oddie
19
+ - Fabio David Batista
20
+ - Chad Humphries
21
+ - Ayende Rahien
22
+ - G. Richard Bellamy
23
+ - Roelof Blom
24
+ - Ahmed Ghandour
25
+ - Josh Robb
26
+ - Ernst Naezer
27
+ - Marc-Andre Cournoyer
28
+ - Fabian Schmied
29
+ - Dave Godfrey
30
+ - Markus Zywitza
31
+ - Lee Henson
32
+ - Ken Egozi
33
+ - Chris Ortman
34
+ - Jonathon Rossi
35
+ - Tuna Toks�z
36
+ - Krzysztof Kozmic
37
+ - Mauricio Scheffer
38
+ - John Simons
39
+
40
+ Managers
41
+ ========
42
+
43
+ Patch Manager
44
+ -------------
45
+
46
+ - Josh Robb
47
+
48
+ Documentation Manager
49
+ ---------------------
50
+
51
+ -
52
+
53
+
54
+ PMC Members
55
+ ===========
56
+ (ordered by the date when joined the PMC)
57
+
58
+ - hammett/Hamilton Verissimo (Chair)
59
+ - Henry Concei��o
60
+ - Kevin Williams
61
+ - Craig Neuwirt
62
+ - Gilles Bayon
63
+ - Chad Humphries
64
+ - Ayende Rahien
65
+ - Fabio David Batista
66
+ - Roelof Blom
67
+ - Josh Robb
68
+ - Jonathon Rossi
69
+
70
+ Emeritus
71
+ ========
72
+ (no longer active committers)
73
+
74
+ - Gilles Bayon
75
+ - Dan
76
+ - Andrew Hallock
77
+ - John Morales
78
+ - CobraLord
79
+ - Tatham Oddie
80
+ - Ahmed Ghandour
@@ -0,0 +1,234 @@
1
+ 2.2.0 (2010-01-11)
2
+ ==================
3
+ - Fixed medium trust issue introduced in 2.2.0 Beta 1 where it would try to create a trace logger.
4
+ - Some changes to the way explicit interface methods are implemented to support WPF databinding.
5
+
6
+ 2.2.0 Beta 1 (2009-12-04)
7
+ =========================
8
+ - Fixed DYNPROXY-ISSUE-120: Add logging to DynamicProxy.
9
+ Introduced basic logging for cache hit/miss, methods that cannot be intercepted, and overriding Equals/GetHashCode.
10
+ - Applied patch from James Curran fixing DYNPROXY-ISSUE-124: "InterfaceProxyWithoutTargetGenerator ctor missing selector parameter".
11
+ - Fixed DYNPROXY-ISSUE-105: Invocation types should be cached and shared among proxy implementations.
12
+ - BREAKING CHANGE - implemented DYNPROXY-ISSUE-91: Allow CreateInterfaceProxyWithTargetInterface to be able to permanently change target.
13
+ - Fixed DYNPROXY-ISSUE-122: "interceptor selector should not affect caching"
14
+ - Fixed DYNPROXY-ISSUE-121: "proxy with target interface incorrectly forwards to mixins"
15
+ - Added ability to change proxy target on mixin methods on interface proxy with target interface
16
+ - Added generic overloads for CreateInterfaceProxyWithTargetInterface to make it consistent with other methods
17
+ - BREAKING CHANGE - changed behavior of invocation.MethodInvocationTarget to be more consistent.
18
+ - Fixed DYNPROXY-ISSUE-117: Fix BaseTypeForInterfaceProxy. Added checks for base type being null, not a class type, being sealed and not having
19
+ default accessible constructor.
20
+ - Fixed DYNPROXY-ISSUE-112: Reimplement DefaultAttributeAssembler to make use of CustomAttributeData to avoid exceptions on unreplicable attributes.
21
+ - Fixed DYNPROXY-ISSUE-118: Can't proxy remoting transparent interface proxies.
22
+ - Fixed DYNPROXY-ISSUE-94: CreateProxyWithTarget fails if you use ProxyGenerationHook
23
+ - Fixed DYNPROXY-ISSUE-89: Proxy generation fails when IProxyGenerationHook chooses not to proxy mixin method
24
+ - Improved (a lot) range of supported scenarios, especially around generics.
25
+ - Improved exception messages in exceptions thrown at users, with short explanation of what they may have done wrong and how to fix it.
26
+ - Fixed DYNPROXY-ISSUE-113: AbstractTypeEmitter can now be used to emit interfaces
27
+ - Fixed DYNPROXY-ISSUE-108: Obtaining replicated custom attributes on proxy may fail when property setter throws exception on default value
28
+ - Moved custom attribute replication from CustomAttributeUtil to new interface - IAttributeDisassembler
29
+ - Exposed IAttributeDisassembler via ProxyGenerationOptions, so that users can plug their implementation for some convoluted scenarios.
30
+ - Fixed DYNPROXY-ISSUE-106: Proxying COM interfaces produces invalid proxies
31
+ - Change in behavior - interfaces are now implemented explicitly (except for class proxy, when class implements the member virtually)
32
+ - Fixed DYNPROXY-ISSUE-96: Implement order of precenence.
33
+ - Interface proxy now can proxy explicit interface implementation
34
+ - Fixed DYNPROXY-ISSUE-103: Proxy with interfaces having methods with identical signature is invalid
35
+ - Fixed DYNPROXY-ISSUE-102: Intercept non-virtual interface implementation
36
+ - Fixed DYNPROXY-ISSUE-100: Additional interfaces on proxy with target interface can cause stack overflow. Now a check is performed and if proxy
37
+ is the target of invocation, or the target is null an exception is thrown.
38
+ - Changed behavior of interface proxies with target interface (all interface proxies actually, but the change in behavior is visible in proxies
39
+ with target interface). Now the target is being casted using 'as' operator to the target interface of invocation, so if the type of target object
40
+ implements additional interfaces invocation target will be set to the proxy target, and to null otherwise. This is consisted with how interface
41
+ proxies with target work.
42
+ - Fixed bug reported by Jos� F. Romaniello - can not assign new target to interface proxy with target interface, in certain scenarios:
43
+ http://groups.google.com/group/castle-project-users/browse_thread/thread/2e507f47dbb831f1
44
+ - Applied Krzysztof Kozmic's clean up patch with some minor changes
45
+ (http://groups.google.com/group/castle-project-devel/browse_thread/thread/853fa870326f7f71/9237bb890ca6dab7)
46
+ - Moved MethodInfos of AbstractInvocation methods to InvocationMethods class, where all the other methods are.
47
+ - Extracted MethodInfos obtained inline to their own classes in Castle.DynamicProxy.Tokens namespace. This should
48
+ improve performance a little bit.
49
+ - Removed two ctors from AbstractInvocation (that didn't have interfMethod parameter).
50
+ - Updated generated proxies to call other two Invocation ctors.
51
+ - Some tidying up in BaseProxyGenerator to remove duplication after updating calls to Invocation ctors.
52
+ - Removed collecting and generating tokenCaches for System.Object methods, since we never use these anyway.
53
+ - Removed redundant casts in code.
54
+ - Changed code using non-generic collections to use their generic conterparts.
55
+ - Some more minor tidying up.
56
+ - Improved exception message when can not instantiate class proxy due to invalid arguments.
57
+ - Reverted changes introduced in fix for DYNPROXY-ISSUE-97 for the constructor issue. It actually is an issue with params object[] which is confusing
58
+ and can lead to errors like the one reported, and the fix was inconsistent with the other overload that had arguments passed as explicit object[]
59
+ and could break the other overload in some scenarios.
60
+ - Marked the overload of CreateClassProxy having params object[] as obsolete
61
+ - Introduced another overload that takes constructor arguments as explicit array, and interceptors as params IInterceptor[] which is the pattern
62
+ for all other overloads anyway.
63
+ - Fixed DYNPROXY-ISSUE-99: "Generated proxy class has no namespace", which due to a bug in WPF caused issues with databinding. Now proxies are in
64
+ namespace Castle.Proxies.
65
+ - Fixed DYNPROXY-97: This issue are actually three separate bugs:
66
+ First relates to the improper handling of types with generic methods having parameters being an array of generic type of T
67
+ Second was related to improper handing of hierarchy of generic constraints, but it seems Fabian's fix to GenericUtil fixed that earlier.
68
+ Third issue was related to improper handing of certain kinds of constructor arguments passed to class proxy generator.
69
+ - Fixed DYNPROXY-90: "DP2: Inherited interfaces w/ target does not to work"
70
+ - Fixed DYNPROXY-88: "proxy generation fail when multiple interfaces have common base interface"
71
+ They both were actually special cases of one issue with invalid collection of interface members.
72
+ - Fixed DYNPROXY-92: "Proxy fails when creating a Proxy for certain Generic signatures"
73
+ The problem was that GenericUtil.cs wrongfully copied generic arguments whose constraints referenced the proxied method without adjusting those
74
+ constraints.
75
+
76
+ 2.1.0 (2009-05-04)
77
+ ==================
78
+ - Fixed DYNPROXY-87: "Mixin takes precedence over target object"
79
+ changed DP to throw exceptions when two mixins implement the same interface or a mixin implements the same interface as its target class/object
80
+
81
+ - Applied Krzysztof Kozmic's patch improving the XML documentation of IInterceptorSelector
82
+ and IProxyGenerationHook.
83
+
84
+ 2.1.0 RC1 (2009-03-10)
85
+ ======================
86
+ - Applied Krzysztof Kozmic's patch improving the XML documentation and parameter names of IProxyBuilder, DefaultProxyBuilder and ProxyGenerator.
87
+
88
+ - Applied Krzysztof Kozmic's patch heavily improving the XML documentation of ProxyGenerator.
89
+
90
+ - Fixed DYNPROXY-ISSUE-84: "UseSingleInterfaceProxy on ProxyGenerationOptions is never used and should be removed"
91
+
92
+ - Fixed DYNPROXY-ISSUE-58/DYNPROXY-ISSUE-77: "Inherited interface seems not to work"
93
+ using Dimitri Goethals' test case and Ayende Rahien/Andrey Shchekin's patch.
94
+
95
+ - Fixed DYNPROXY-ISSUE-52: "DynamicProxy 1.1.5 doesn't work on Medium Trust"
96
+ uses the assembly's fullname instead of calling GetName()
97
+
98
+ - Fixed DYNPROXY-ISSUE-82: "Not allow generics & NoGeneric methods with same signature"
99
+ using Fabio Maulo's test case and Krzysztof Kozmic patch.
100
+
101
+ - Applied Neil Bourgeois's patch fixing DYNPROXY-ISSUE-78
102
+ "Custom attributes of virtual properties absent on proxy"
103
+
104
+ - Applied Craig Vermeer's patch fixing an issue with generating default constructors for DYNPROXY-ISSUE-81
105
+ "No Default Constructor in generated Class Proxy"
106
+
107
+ - Added support for IInterceptorSelector (patch provided by Krzysztof Kozmic).
108
+ - Removed ProxyGenerationOptions.UseSelector.
109
+
110
+ - Added support for generic methods when specifying additional interfaces to CreateInterfaceProxyWithoutTarget (reported by Craig Neuwirth, cause
111
+ found by Krzysztof Kozmic)
112
+
113
+ - Added support for provide additional interfaces for target interface proxies.
114
+
115
+ - Added workarounds for dictionary deserialization scenarios (reported by Gr�gory C�let)
116
+
117
+ - Fixed mixin-related bug with serialization (per Rogelio again)
118
+ - Made interface proxies without target and with target interface support mixins
119
+
120
+ - Fixed ProxyGenerationOptions equality issues with ordering and different instances of the same mixin types (thanks for finding
121
+ the bug, Rogelio)
122
+
123
+ - Readded mixin support (via Rogelio J. Baucells)
124
+
125
+ - ClassEmitter now supports emitting fields with specific attributes
126
+
127
+ - Added a load API to ModuleScope
128
+ - SaveAssembly now serializes the cache keys together with the generated types
129
+
130
+ - Fixed test issue - PEVerify is now called with a quoted assembly path (to allow for spaces in the path)
131
+ - Fixed test annoyance - PEVerify is now not called in a separate window
132
+ - Changed PersistentProxyBuilder behavior - SaveAssembly is not called by the class generators any more, instead PersistentProxyBuilder.SaveAssemblies
133
+ must be used. This allows the proxy builder to save multiple proxies at the same time. Test cases have been adapted.
134
+
135
+ - Fixed issues with CacheKey.Equals and ProxyGenerationOptions.Equals/GetHashCode
136
+ - Added a way to set and retrieve the ModuleScope used by ProxyObjectReference for proxy deserialization; proxies can now be deserialized with
137
+ the same ModuleScope used by the application (DYNPROXY-71)
138
+
139
+ - Made BasePEVerifyTestCase only check those assemblies that were actually generated in the test case, see DYNPROXY-68
140
+ - Fixed bug with protected internal constructors, see DYNPROXY-66/DYNPROXY-67
141
+ - Fixed test cases not using the ProxyGenerator supplied by BasePEVerifyTestCase, see DYNPROXY-69
142
+
143
+ - Added StrongNameUtil, which provides methods for checking whether an assembly is signed/a type comes from a signed assembly
144
+ - Added an additional constructor overload to ClassEmitter, allowing to force it to use an unsigned assembly
145
+
146
+ - Fixed a bug in ModuleScope: SaveAssembly tried to delete from the current directory if a file with a matching name existed, not from the target
147
+ directory
148
+
149
+ - Applied Pawel Pabich's suggestion fixing DYNPROXY-65
150
+ "OpCodeUtil.GetUnderlyingTypeOfEnum doesn't handle unsigned integers"
151
+
152
+ - Fixed bug in ArgumentReference occurring when emitting static methods
153
+
154
+ - Removed ClsCompliant(false) from all the public types in DynamicProxy
155
+
156
+ - Added constructors to ClassEmitter, removed "serializable" ctor parameter, it wasn't used
157
+
158
+ - Fixed bug in ModuleScope, see DYNPROXY-64
159
+
160
+ - Fixed bug in LoadArrayElementExpression, see DYNPROXY-57
161
+
162
+ - Changed signing behavior for generated assembly, assembly is now only signed if all involved types (base type, interfaces) are also signed
163
+
164
+ - Documented ModuleScope, added friendlier API for saving assemblies, added tests for ModuleScope, see DYNPROXY-55
165
+
166
+ - Applied Adam Tybor's patch fixing DYNPROXY-63
167
+ "ProxyType not included in CacheKey"
168
+
169
+ - Reimplemented serialization of ProxyGenerationOptions, see revision 3803, DYNPROXY-59
170
+
171
+ - Added method signature filtering to MethodFinder (see MethodSignatureComparer) because there were
172
+ still cases triggering duplicate methods
173
+
174
+ - Reimplemented serialization without default constructors, see revision 3725, DYNPROXY-53
175
+ - Reimplemented serialization with delegates/events, see revision 3751, DYNPROXY-56
176
+
177
+ - Renamed InterfaceProxyGeneratorWithoutTarget to InterfaceProxyWithoutTargetGenerator
178
+
179
+ - Fixed DYNPROXY-62
180
+ "Some tests in MethodFinderTestCase failed because of culture specific exception messages"
181
+
182
+ - Implemented cache for System.Type.GetMethods() in order to avoid triggering the duplicate methods bug
183
+
184
+ - Applied Adam Tybor's patch fixing DYNPROXY-61
185
+ "Need GetInterceptors from IProxyTargetAccessor back for NHibernate Trunk"
186
+
187
+ - Disabled replication of internal constructors on class proxies.
188
+
189
+ - Moved the UseSingleInterfaceProxy from Core.ComponentModel to ProxyGeneratorOptions.
190
+
191
+ - Applied Lee Henson's patch fixing generic parameter definitions
192
+
193
+ - Applied Jacob Lewallen's patch that introduces ProxyInterfaceWithTargetInterface
194
+ Quoting
195
+
196
+ "I've introduced a new "mode" that is
197
+ ProxyInterfaceWithTargetInterface, that uses the given interface as
198
+ the target type, rather than the type of the target (it asserts the
199
+ target implements the interface) All other modes should remain the
200
+ same.
201
+
202
+ "In this scenario, the IInvocation will also implement
203
+ IChangeProxyTarget, which can then be used to change the proxy target
204
+ to another implementation of the target interface."
205
+
206
+ - Added support for events
207
+
208
+ - Fixed DYNPROXY-43
209
+ "DP2 : Missing ParameterInfo 'Name' for Proxied methods"
210
+
211
+ - Fixed DYNPROXY-41
212
+ "Invalid state exception on DP2"
213
+
214
+ - Fixed DYNPROXY-39
215
+ "Deadlock in DynamicProxy2"
216
+
217
+ - Fixed DYNPROXY-28
218
+ "Virtual methods calls from constructors are not working"
219
+
220
+ - Fixed DYNPROXY-27
221
+ "Support for non-parameterless constructors"
222
+
223
+ - Fixed DYNPROXY-25
224
+ "Chars returns are not properly configured"
225
+
226
+ - Fixed DYNPROXY-24
227
+ "DynamicProxy2: missing locks"
228
+
229
+ - Fixed DYNPROXY-34
230
+ "Cant proxy generic interfaces"
231
+
232
+ Alpha Version 1.0.0.0
233
+ =====================
234
+ - First release
@@ -4,42 +4,42 @@
4
4
  <name>Castle.DynamicProxy2</name>
5
5
  </assembly>
6
6
  <members>
7
- <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.IndirectReference">
7
+ <member name="M:Castle.DynamicProxy.Contributors.MembersCollector.IsAccessible(System.Reflection.MethodBase)">
8
8
  <summary>
9
- Wraps a reference that is passed
10
- ByRef and provides indirect load/store support.
9
+ Checks if the method is public or protected.
11
10
  </summary>
11
+ <param name="method"></param>
12
+ <returns></returns>
12
13
  </member>
13
- <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.NewArrayExpression">
14
+ <member name="M:Castle.DynamicProxy.Contributors.MembersCollector.AcceptMethod(System.Reflection.MethodInfo,System.Boolean,Castle.DynamicProxy.IProxyGenerationHook)">
14
15
  <summary>
15
- Summary description for NewArrayExpression.
16
+ Performs some basic screening and invokes the <see cref="T:Castle.DynamicProxy.IProxyGenerationHook"/>
17
+ to select methods.
16
18
  </summary>
19
+ <param name="method"></param>
20
+ <param name="onlyVirtuals"></param>
21
+ <param name="hook"></param>
22
+ <returns></returns>
17
23
  </member>
18
- <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.ReferencesToObjectArrayExpression">
24
+ <member name="T:Castle.DynamicProxy.Contributors.ITypeContributor">
19
25
  <summary>
20
-
26
+ Interface describing elements composing generated type
21
27
  </summary>
22
28
  </member>
23
- <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.InitializeConstructorArgs(System.Type,System.Attribute,System.Object[],System.Reflection.ParameterInfo[])">
29
+ <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.IndirectReference">
24
30
  <summary>
25
- Here we try to match a constructor argument to its value.
26
- Since we can't get the values from the assembly, we use some heuristics to get it.
27
- a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument
28
- b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string).
31
+ Wraps a reference that is passed
32
+ ByRef and provides indirect load/store support.
29
33
  </summary>
30
34
  </member>
31
- <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.ReplaceIfBetterMatch(System.Reflection.ParameterInfo,System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)">
35
+ <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.NewArrayExpression">
32
36
  <summary>
33
- We have the following rules here.
34
- Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that
35
- we can convert it.
37
+ Summary description for NewArrayExpression.
36
38
  </summary>
37
39
  </member>
38
- <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.ConvertValue(System.Object,System.Type)">
40
+ <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.ReferencesToObjectArrayExpression">
39
41
  <summary>
40
- Attributes can only accept simple types, so we return null for null,
41
- if the value is passed as string we call to string (should help with converting),
42
- otherwise, we use the value as is (enums, integer, etc).
42
+
43
43
  </summary>
44
44
  </member>
45
45
  <member name="T:Castle.DynamicProxy.Generators.Emitters.LdcOpCodesDictionary">
@@ -103,161 +103,138 @@
103
103
  for the type of primitive value to be stored indirectly.
104
104
  </summary>
105
105
  </member>
106
- <member name="T:Castle.DynamicProxy.Generators.BaseProxyGenerator">
107
- <summary>
108
- Base class that exposes the common functionalities
109
- to proxy generation.
110
- </summary>
111
- <remarks>
112
- TODO:
113
- - Add tests and fixes for 'leaking this' problem
114
- </remarks>
115
- </member>
116
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GetProxyTargetReference">
106
+ <member name="M:Castle.DynamicProxy.Generators.Emitters.TypeUtil.GetAllInterfaces(System.Type[])">
117
107
  <summary>
118
- Used by dinamically implement <see cref="T:Castle.Core.Interceptor.IProxyTargetAccessor"/>
108
+ Returns list of all unique interfaces implemented given types, including their base interfaces.
119
109
  </summary>
110
+ <param name="types"></param>
120
111
  <returns></returns>
121
112
  </member>
122
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GenerateParameterlessConstructor(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference)">
113
+ <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.HandleError(System.Type,System.Exception)">
123
114
  <summary>
124
- Generates a parameters constructor that initializes the proxy
125
- state with <see cref="T:Castle.Core.Interceptor.StandardInterceptor"/> just to make it non-null.
126
- <para>
127
- This constructor is important to allow proxies to be XML serializable
128
- </para>
129
- </summary>
130
- </member>
131
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildInvocationNestedType(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,Castle.DynamicProxy.Generators.ConstructorVersion)">
132
- <summary>
133
- If callbackMethod is null the InvokeOnTarget implementation
134
- is just the code to throw an exception
115
+ Handles error during disassembly process
135
116
  </summary>
136
- <param name="emitter"></param>
137
- <param name="targetType"></param>
138
- <param name="targetForInvocation"></param>
139
- <param name="methodInfo"></param>
140
- <param name="callbackMethod"></param>
141
- <param name="version"></param>
142
- <returns></returns>
117
+ <param name="attributeType">Type of the attribute being disassembled</param>
118
+ <param name="exception">Exception thrown during the process</param>
119
+ <returns>usually null, or (re)throws the exception</returns>
143
120
  </member>
144
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildInvocationNestedType(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,System.Type,System.Reflection.MethodInfo,System.Reflection.MethodInfo,Castle.DynamicProxy.Generators.ConstructorVersion,System.Boolean)">
121
+ <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.InitializeConstructorArgs(System.Type,System.Attribute,System.Object[],System.Reflection.ParameterInfo[])">
145
122
  <summary>
146
- If callbackMethod is null the InvokeOnTarget implementation
147
- is just the code to throw an exception
123
+ Here we try to match a constructor argument to its value.
124
+ Since we can't get the values from the assembly, we use some heuristics to get it.
125
+ a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument
126
+ b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string).
148
127
  </summary>
149
- <param name="emitter"></param>
150
- <param name="targetType"></param>
151
- <param name="targetForInvocation"></param>
152
- <param name="methodInfo"></param>
153
- <param name="callbackMethod"></param>
154
- <param name="version"></param>
155
- <param name="allowChangeTarget">If true the invocation will implement the IChangeProxyTarget interface</param>
156
- <returns></returns>
157
128
  </member>
158
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.CreateIInvocationConstructor(System.Type,Castle.DynamicProxy.Generators.Emitters.NestedClassEmitter,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference,Castle.DynamicProxy.Generators.ConstructorVersion)">
129
+ <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.ReplaceIfBetterMatch(System.Reflection.ParameterInfo,System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)">
159
130
  <summary>
160
- Generates the constructor for the nested class that extends
161
- <see cref="T:Castle.DynamicProxy.AbstractInvocation"/>
131
+ We have the following rules here.
132
+ Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that
133
+ we can convert it.
162
134
  </summary>
163
- <param name="targetFieldType"></param>
164
- <param name="nested"></param>
165
- <param name="targetField"></param>
166
- <param name="version"></param>
167
135
  </member>
168
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.CreateInitializeCacheMethodBody(System.Type,System.Reflection.MethodInfo[],Castle.DynamicProxy.Generators.Emitters.ClassEmitter,Castle.DynamicProxy.Generators.Emitters.ConstructorEmitter)">
136
+ <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.ConvertValue(System.Object,System.Type)">
169
137
  <summary>
170
- Improvement: this cache should be static. We should generate a
171
- type constructor instead
138
+ Attributes can only accept simple types, so we return null for null,
139
+ if the value is passed as string we call to string (should help with converting),
140
+ otherwise, we use the value as is (enums, integer, etc).
172
141
  </summary>
173
142
  </member>
174
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.AcceptMethod(System.Reflection.MethodInfo,System.Boolean)">
143
+ <member name="T:Castle.DynamicProxy.Generators.BaseProxyGenerator">
175
144
  <summary>
176
- Performs some basic screening and invokes the <see cref="T:Castle.DynamicProxy.IProxyGenerationHook"/>
177
- to select methods.
145
+ Base class that exposes the common functionalities
146
+ to proxy generation.
178
147
  </summary>
179
- <param name="method"></param>
180
- <param name="onlyVirtuals"></param>
181
- <returns></returns>
182
148
  </member>
183
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.IsAccessible(System.Reflection.MethodInfo)">
149
+ <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GenerateParameterlessConstructor(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference)">
184
150
  <summary>
185
- Checks if the method is public or protected.
151
+ Generates a parameters constructor that initializes the proxy
152
+ state with <see cref="T:Castle.Core.Interceptor.StandardInterceptor"/> just to make it non-null.
153
+ <para>
154
+ This constructor is important to allow proxies to be XML serializable
155
+ </para>
186
156
  </summary>
187
- <param name="method"></param>
188
- <returns></returns>
189
157
  </member>
190
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.ShouldSkipAttributeReplication(System.Attribute)">
158
+ <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.AddMappingNoCheck(System.Type,Castle.DynamicProxy.Contributors.ITypeContributor,System.Collections.Generic.IDictionary{System.Type,Castle.DynamicProxy.Contributors.ITypeContributor})">
191
159
  <summary>
192
- Attributes should be replicated if they are non-inheritable,
193
- but there are some special cases where the attributes means
194
- something to the CLR, where they should be skipped.
160
+ It is safe to add mapping (no mapping for the interface exists)
195
161
  </summary>
162
+ <param name="implementer"></param>
163
+ <param name="interface"></param>
164
+ <param name="mapping"></param>
196
165
  </member>
197
- <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.ShouldCreateNewSlot(System.Reflection.MethodInfo)">
166
+ <member name="M:Castle.DynamicProxy.Generators.CacheKey.#ctor(System.Reflection.MemberInfo,System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)">
198
167
  <summary>
199
- Checks if the method has the same signature as a method that was marked as
200
- one that should generate a new vtable slot.
168
+ Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.CacheKey"/> class.
201
169
  </summary>
170
+ <param name="target">Target element. This is either target type or target method for invocation types.</param>
171
+ <param name="type">The type of the proxy. This is base type for invocation types.</param>
172
+ <param name="interfaces">The interfaces.</param>
173
+ <param name="options">The options.</param>
202
174
  </member>
203
175
  <member name="M:Castle.DynamicProxy.Generators.CacheKey.#ctor(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)">
204
176
  <summary>
205
177
  Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.CacheKey"/> class.
206
178
  </summary>
207
- <param name="targetType">Type of the target.</param>
179
+ <param name="target">Type of the target.</param>
208
180
  <param name="interfaces">The interfaces.</param>
209
181
  <param name="options">The options.</param>
210
182
  </member>
211
- <member name="T:Castle.DynamicProxy.Generators.ClassProxyGenerator">
183
+ <member name="M:Castle.DynamicProxy.Generators.InvocationTypeGenerator.GetCtorArgumentsAndBaseCtorToCall(System.Type,Castle.DynamicProxy.ProxyGenerationOptions,System.Reflection.ConstructorInfo@)">
212
184
  <summary>
213
-
185
+ Generates the constructor for the class that extends
186
+ <see cref="T:Castle.DynamicProxy.AbstractInvocation"/>
214
187
  </summary>
188
+ <param name="targetFieldType"></param>
189
+ <param name="proxyGenerationOptions"></param>
190
+ <param name="baseConstructor"></param>
215
191
  </member>
216
- <member name="M:Castle.DynamicProxy.Generators.EventToGenerate.#ctor(Castle.DynamicProxy.Generators.Emitters.EventEmitter,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.EventAttributes)">
192
+ <member name="T:Castle.DynamicProxy.Generators.ClassProxyGenerator">
217
193
  <summary>
218
- Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.EventToGenerate"/> class.
194
+
219
195
  </summary>
220
- <param name="emitter">The emitter.</param>
221
- <param name="addMethod">The add method.</param>
222
- <param name="removeMethod">The remove method.</param>
223
- <param name="attributes">The attributes.</param>
224
196
  </member>
225
- <member name="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator">
197
+ <member name="T:Castle.DynamicProxy.Generators.INamingScope">
226
198
  <summary>
227
-
199
+ Represents the scope of uniquenes of names for types and their members
228
200
  </summary>
229
201
  </member>
230
- <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.FindMethodOnTargetType(System.Reflection.MethodInfo,System.Type,System.Boolean)">
202
+ <member name="M:Castle.DynamicProxy.Generators.INamingScope.GetUniqueName(System.String)">
231
203
  <summary>
232
- Finds the type of the method on target.
204
+ Gets a unique name based on <paramref name="suggestedName"/>
233
205
  </summary>
234
- <param name="methodOnInterface">The method on interface.</param>
235
- <param name="proxyTargetType">Type of the proxy target.</param>
236
- /// <param name="checkMixins">if set to <c>true</c> will check implementation on mixins.</param>
237
- <returns></returns>
206
+ <param name="suggestedName">Name suggested by the caller</param>
207
+ <returns>Unique name based on <paramref name="suggestedName"/>.</returns>
208
+ <remarks>
209
+ Implementers should provide name as closely resembling <paramref name="suggestedName"/> as possible.
210
+ Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix.
211
+ Implementers must return deterministic names, that is when <see cref="M:Castle.DynamicProxy.Generators.INamingScope.GetUniqueName(System.String)"/> is called twice
212
+ with the same suggested name, the same returned name should be provided each time. Non-deterministic return
213
+ values, like appending random suffices will break serialization of proxies.
214
+ </remarks>
238
215
  </member>
239
- <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.IsTypeEquivalent(System.Type,System.Type)">
216
+ <member name="M:Castle.DynamicProxy.Generators.INamingScope.SafeSubScope">
240
217
  <summary>
241
- Checks whether the given types are the same. This is
242
- more complicated than it looks.
218
+ Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision
219
+ with enclosing scope, or other subscopes is possible.
243
220
  </summary>
244
- <param name="sourceType"></param>
245
- <param name="targetType"></param>
246
- <returns></returns>
221
+ <returns>New naming scope.</returns>
247
222
  </member>
248
- <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.IsMethodEquivalent(System.Reflection.MethodInfo,System.Reflection.MethodInfo)">
223
+ <member name="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator">
249
224
  <summary>
250
- Checks whether the given methods are the same.
225
+
251
226
  </summary>
252
- <param name="methodInfo"></param>
253
- <param name="methodOnInterface"></param>
254
- <returns>True if the methods are the same.</returns>
255
227
  </member>
256
- <member name="T:Castle.DynamicProxy.Generators.InterfaceGeneratorType">
228
+ <member name="M:Castle.DynamicProxy.Generators.MetaEvent.#ctor(System.String,System.Type,System.Type,Castle.DynamicProxy.Generators.MetaMethod,Castle.DynamicProxy.Generators.MetaMethod,System.Reflection.EventAttributes)">
257
229
  <summary>
258
- This is used by the ProxyObjectReference class durin de-serialiation, to know
259
- which generator it should use
230
+ Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.MetaEvent"/> class.
260
231
  </summary>
232
+ <param name="name">The name.</param>
233
+ <param name="declaringType">Type declaring the original event being overriten, or null.</param>
234
+ <param name="eventDelegateType"></param>
235
+ <param name="adder">The add method.</param>
236
+ <param name="remover">The remove method.</param>
237
+ <param name="attributes">The attributes.</param>
261
238
  </member>
262
239
  <member name="T:Castle.DynamicProxy.Generators.MethodFinder">
263
240
  <summary>
@@ -292,6 +269,41 @@
292
269
  might use more than one scope at the same time), <see cref="T:Castle.DynamicProxy.Serialization.ProxyObjectReference"/> uses a dedicated scope instance for deserializing proxy
293
270
  types. This instance can be reset and set to a specific value via <see cref="M:Castle.DynamicProxy.Serialization.ProxyObjectReference.ResetScope"/> and <see cref="M:Castle.DynamicProxy.Serialization.ProxyObjectReference.SetScope(Castle.DynamicProxy.ModuleScope)"/>.</value>
294
271
  </member>
272
+ <member name="T:Castle.DynamicProxy.Tokens.InvocationMethods">
273
+ <summary>
274
+ Holds <see cref="T:System.Reflection.MethodInfo"/> objects representing methods of <see cref="T:Castle.DynamicProxy.AbstractInvocation"/> class.
275
+ </summary>
276
+ </member>
277
+ <member name="T:Castle.DynamicProxy.Tokens.SerializationInfoMethods">
278
+ <summary>
279
+ Holds <see cref="T:System.Reflection.MethodInfo"/> objects representing methods of <see cref="T:System.Runtime.Serialization.SerializationInfo"/> class.
280
+ </summary>
281
+ </member>
282
+ <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Bool">
283
+ <summary>
284
+ <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Boolean)"/>
285
+ </summary>
286
+ </member>
287
+ <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Int32">
288
+ <summary>
289
+ <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Int32)"/>
290
+ </summary>
291
+ </member>
292
+ <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Object">
293
+ <summary>
294
+ <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Object)"/>
295
+ </summary>
296
+ </member>
297
+ <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.GetValue">
298
+ <summary>
299
+ <see cref="M:System.Runtime.Serialization.SerializationInfo.GetValue(System.String,System.Type)"/>
300
+ </summary>
301
+ </member>
302
+ <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.SetType">
303
+ <summary>
304
+ <see cref="M:System.Runtime.Serialization.SerializationInfo.SetType(System.Type)"/>
305
+ </summary>
306
+ </member>
295
307
  <member name="T:Castle.DynamicProxy.IProxyGenerationHook">
296
308
  <summary>
297
309
  Used during the target type inspection process. Implementors have a chance to customize the
@@ -323,6 +335,24 @@
323
335
  Invoked by the generation process to notify that the whole process has completed.
324
336
  </summary>
325
337
  </member>
338
+ <member name="M:Castle.DynamicProxy.AttributeUtil.AddDisassembler``1(Castle.DynamicProxy.IAttributeDisassembler)">
339
+ <summary>
340
+ Registers custom disassembler to handle disassembly of specified type of attributes.
341
+ </summary>
342
+ <typeparam name="TAttribute">Type of attributes to handle</typeparam>
343
+ <param name="disassembler">Disassembler converting existing instances of Attributes to CustomAttributeBuilders</param>
344
+ <remarks>
345
+ When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type,
346
+ and if none is found, it'll use the <see cref="P:Castle.DynamicProxy.AttributeUtil.FallbackDisassembler"/>.
347
+ </remarks>
348
+ </member>
349
+ <member name="M:Castle.DynamicProxy.AttributeUtil.ShouldSkipAttributeReplication(System.Type)">
350
+ <summary>
351
+ Attributes should be replicated if they are non-inheritable,
352
+ but there are some special cases where the attributes means
353
+ something to the CLR, where they should be skipped.
354
+ </summary>
355
+ </member>
326
356
  <member name="T:Castle.DynamicProxy.CacheMappingsAttribute">
327
357
  <summary>
328
358
  Applied to the assemblies saved by <see cref="T:Castle.DynamicProxy.ModuleScope"/> in order to persist the cache data included in the persisted assembly.
@@ -369,6 +399,24 @@
369
399
  pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception>
370
400
  <seealso cref="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"/>
371
401
  </member>
402
+ <member name="M:Castle.DynamicProxy.IProxyBuilder.CreateClassProxyType(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)">
403
+ <summary>
404
+ Creates a proxy type for given <paramref name="classToProxy"/>, implementing <paramref name="additionalInterfacesToProxy"/>, using <paramref name="options"/> provided.
405
+ </summary>
406
+ <param name="classToProxy">The class type to proxy.</param>
407
+ <param name="additionalInterfacesToProxy">Additional interface types to proxy.</param>
408
+ <param name="options">The proxy generation options.</param>
409
+ <returns>The generated proxy type.</returns>
410
+ <remarks>
411
+ Implementers should return a proxy type for the specified class and interfaces.
412
+ Additional interfaces should be only 'mark' interfaces, that is, they should work like interface proxy without target. (See <see cref="M:Castle.DynamicProxy.IProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)"/> method.)
413
+ </remarks>
414
+ <exception cref="T:Castle.DynamicProxy.Generators.GeneratorException">Thrown when <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception>
415
+ <exception cref="T:Castle.DynamicProxy.Generators.GeneratorException">Thrown when <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is not public.
416
+ Note that to avoid this exception, you can mark offending type internal, and define <see cref="T:System.Runtime.CompilerServices.InternalsVisibleToAttribute"/>
417
+ pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception>
418
+ <seealso cref="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"/>
419
+ </member>
372
420
  <member name="M:Castle.DynamicProxy.IProxyBuilder.CreateInterfaceProxyTypeWithTarget(System.Type,System.Type[],System.Type,Castle.DynamicProxy.ProxyGenerationOptions)">
373
421
  <summary>
374
422
  Creates a proxy type that proxies calls to <paramref name="interfaceToProxy"/> members on <paramref name="targetType"/>, implementing <paramref name="additionalInterfacesToProxy"/>, using <paramref name="options"/> provided.
@@ -424,6 +472,11 @@
424
472
  pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception>
425
473
  <seealso cref="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetInterfaceGenerator"/>
426
474
  </member>
475
+ <member name="P:Castle.DynamicProxy.IProxyBuilder.Logger">
476
+ <summary>
477
+ Gets or sets the <see cref="T:Castle.Core.Logging.ILogger"/> that this <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> logs to.
478
+ </summary>
479
+ </member>
427
480
  <member name="P:Castle.DynamicProxy.IProxyBuilder.ModuleScope">
428
481
  <summary>
429
482
  Gets the <see cref="P:Castle.DynamicProxy.IProxyBuilder.ModuleScope"/> associated with this builder.
@@ -441,33 +494,6 @@
441
494
  </summary>
442
495
  <param name="scope">The module scope for generated proxy types.</param>
443
496
  </member>
444
- <member name="T:Castle.DynamicProxy.IInterceptorSelector">
445
- <summary>
446
- Provides an extension point that allows proxies to choose specific interceptors on
447
- a per method basis.
448
- </summary>
449
- </member>
450
- <member name="M:Castle.DynamicProxy.IInterceptorSelector.SelectInterceptors(System.Type,System.Reflection.MethodInfo,Castle.Core.Interceptor.IInterceptor[])">
451
- <summary>
452
- Selects the interceptors that should intercept calls to the given <paramref name="method"/>.
453
- </summary>
454
- <param name="type">The type declaring the method to intercept.</param>
455
- <param name="method">The method that will be intercepted.</param>
456
- <param name="interceptors">All interceptors registered with the proxy.</param>
457
- <returns>An array of interceptors to invoke upon calling the <paramref name="method"/>.</returns>
458
- <remarks>
459
- This method is called only once per proxy instance, upon the first call to the
460
- <paramref name="method"/>. Either an empty array or null are valid return values to indicate
461
- that no interceptor should intercept calls to the method. Although it is not advised, it is
462
- legal to return other <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementations than these provided in
463
- <paramref name="interceptors"/>. A better way to do this, is by passing all the required
464
- interceptors to the appropriate method of <see cref="T:Castle.DynamicProxy.ProxyGenerator"/>. You can use this
465
- method to influence the order in which interceptors will be called, by reordering the array.
466
- Returning an array containing null references (Nothing in Visual Basic) is not legal,
467
- and will result in a runtime exception.
468
- </remarks>
469
- <seealso cref="T:Castle.DynamicProxy.ProxyGenerationOptions"/>
470
- </member>
471
497
  <member name="M:Castle.DynamicProxy.InternalsHelper.IsInternalToDynamicProxy(System.Reflection.Assembly)">
472
498
  <summary>
473
499
  Determines whether this assembly has internals visible to dynamic proxy.
@@ -532,6 +558,18 @@
532
558
  <param name="weakAssemblyName">The simple name of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
533
559
  <param name="weakModulePath">The path and file name of the manifest module of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
534
560
  </member>
561
+ <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,Castle.DynamicProxy.Generators.INamingScope,System.String,System.String,System.String,System.String)">
562
+ <summary>
563
+ Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ModuleScope"/> class, allowing to specify whether the assemblies generated by this instance
564
+ should be saved and what simple names are to be assigned to them.
565
+ </summary>
566
+ <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param>
567
+ <param name="namingScope">Naming scope used to provide unique names to generated types and their members (usually via sub-scopes).</param>
568
+ <param name="strongAssemblyName">The simple name of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
569
+ <param name="strongModulePath">The path and file name of the manifest module of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
570
+ <param name="weakAssemblyName">The simple name of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
571
+ <param name="weakModulePath">The path and file name of the manifest module of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param>
572
+ </member>
535
573
  <member name="M:Castle.DynamicProxy.ModuleScope.GetFromCache(Castle.DynamicProxy.Generators.CacheKey)">
536
574
  <summary>
537
575
  Returns a type from this scope's type cache, or null if the key cannot be found.
@@ -619,7 +657,7 @@
619
657
  to avoid the performance hit associated with proxy generation.
620
658
  </remarks>
621
659
  </member>
622
- <member name="P:Castle.DynamicProxy.ModuleScope.RWLock">
660
+ <member name="P:Castle.DynamicProxy.ModuleScope.Lock">
623
661
  <summary>
624
662
  Users of this <see cref="T:Castle.DynamicProxy.ModuleScope"/> should use this lock when accessing the cache.
625
663
  </summary>
@@ -726,11 +764,13 @@
726
764
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
727
765
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
728
766
  <remarks>
767
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
768
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.Core.Interceptor.IInterceptor[])"/> method.
729
769
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
730
770
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
731
771
  </remarks>
732
772
  </member>
733
- <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
773
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
734
774
  <summary>
735
775
  Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>.
736
776
  </summary>
@@ -747,6 +787,8 @@
747
787
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
748
788
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
749
789
  <remarks>
790
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
791
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"/> method.
750
792
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
751
793
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
752
794
  </remarks>
@@ -770,6 +812,8 @@
770
812
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
771
813
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
772
814
  <remarks>
815
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
816
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.Core.Interceptor.IInterceptor[])"/> method.
773
817
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
774
818
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
775
819
  </remarks>
@@ -794,6 +838,8 @@
794
838
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
795
839
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
796
840
  <remarks>
841
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
842
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"/> method.
797
843
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
798
844
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
799
845
  </remarks>
@@ -818,6 +864,8 @@
818
864
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
819
865
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
820
866
  <remarks>
867
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
868
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.Core.Interceptor.IInterceptor[])"/> method.
821
869
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
822
870
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
823
871
  </remarks>
@@ -843,6 +891,8 @@
843
891
  <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
844
892
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
845
893
  <remarks>
894
+ This method generates new proxy type for each type of <paramref name="target"/>, which affects performance. If you don't want to proxy types differently depending on the type of the target
895
+ use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"/> method.
846
896
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
847
897
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
848
898
  </remarks>
@@ -871,6 +921,74 @@
871
921
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
872
922
  </remarks>
873
923
  </member>
924
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.Core.Interceptor.IInterceptor[])">
925
+ <summary>
926
+ Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>.
927
+ Interceptors can use <see cref="T:Castle.Core.Interceptor.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>.
928
+ </summary>
929
+ <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam>
930
+ <param name="target">The target object, calls to which will be intercepted.</param>
931
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
932
+ <returns>
933
+ Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor.
934
+ </returns>
935
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception>
936
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception>
937
+ <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception>
938
+ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
939
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
940
+ <remarks>
941
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
942
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
943
+ </remarks>
944
+ </member>
945
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
946
+ <summary>
947
+ Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>.
948
+ Interceptors can use <see cref="T:Castle.Core.Interceptor.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>.
949
+ </summary>
950
+ <typeparam name="TInterface">Type of the interface implemented by <paramref name="target"/> which will be proxied.</typeparam>
951
+ <param name="target">The target object, calls to which will be intercepted.</param>
952
+ <param name="options">The proxy generation options used to influence generated proxy type and object.</param>
953
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
954
+ <returns>
955
+ Object proxying calls to members of <typeparamref name="TInterface"/> type on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor.
956
+ </returns>
957
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception>
958
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception>
959
+ <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception>
960
+ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
961
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
962
+ <remarks>
963
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
964
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
965
+ </remarks>
966
+ </member>
967
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Type[],System.Object,Castle.Core.Interceptor.IInterceptor[])">
968
+ <summary>
969
+ Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>.
970
+ Interceptors can use <see cref="T:Castle.Core.Interceptor.IChangeProxyTarget"/> interface to provide other target for method invocation than default <paramref name="target"/>.
971
+ </summary>
972
+ <param name="interfaceToProxy">Type of the interface implemented by <paramref name="target"/> which will be proxied.</param>
973
+ <param name="target">The target object, calls to which will be intercepted.</param>
974
+ <param name="additionalInterfacesToProxy">Additional interface types. Calls to their members will be proxied as well.</param>
975
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
976
+ <returns>
977
+ Object proxying calls to members of <paramref name="interfaceToProxy"/> and <paramref name="additionalInterfacesToProxy"/> types on <paramref name="target"/> object or alternative implementation swapped at runtime by an interceptor.
978
+ </returns>
979
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
980
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="target"/> object is a null reference (Nothing in Visual Basic).</exception>
981
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception>
982
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception>
983
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> is not an interface type.</exception>
984
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="target"/> does not implement <paramref name="interfaceToProxy"/> interface.</exception>
985
+ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception>
986
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception>
987
+ <remarks>
988
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
989
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
990
+ </remarks>
991
+ </member>
874
992
  <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
875
993
  <summary>
876
994
  Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>.
@@ -931,11 +1049,12 @@
931
1049
  <returns>
932
1050
  Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object.
933
1051
  </returns>
934
- <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptor"/> object is a null reference (Nothing in Visual Basic).</exception>
1052
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptor"/> array is a null reference (Nothing in Visual Basic).</exception>
935
1053
  <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception>
936
1054
  <remarks>
937
1055
  Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementations.
938
1056
  They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/>, since there's no actual implementation to proceed with.
1057
+ As a result of that also at least one <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementation must be provided.
939
1058
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
940
1059
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
941
1060
  </remarks>
@@ -959,17 +1078,37 @@
959
1078
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
960
1079
  </remarks>
961
1080
  </member>
1081
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget``1(Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
1082
+ <summary>
1083
+ Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on target object generated at runtime with given <paramref name="interceptors"/>.
1084
+ </summary>
1085
+ <typeparam name="TInterface">Type of the interface which will be proxied.</typeparam>
1086
+ <param name="options">The proxy generation options used to influence generated proxy type and object.</param>
1087
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1088
+ <returns>
1089
+ Object proxying calls to members of <typeparamref name="TInterface"/> types on generated target object.
1090
+ </returns>
1091
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception>
1092
+ <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TInterface"/> is not an interface type.</exception>
1093
+ <remarks>
1094
+ Since this method uses an empty-shell implementation of interfaces to proxy generated at runtime, the actual implementation of proxied methods must be provided by given <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementations.
1095
+ They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/>, since there's no actual implementation to proceed with.
1096
+ As a result of that also at least one <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementation must be provided.
1097
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1098
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1099
+ </remarks>
1100
+ </member>
962
1101
  <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(System.Type,Castle.Core.Interceptor.IInterceptor)">
963
1102
  <summary>
964
1103
  Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on target object generated at runtime with given <paramref name="interceptor"/>.
965
1104
  </summary>
966
1105
  <param name="interfaceToProxy">Type of the interface which will be proxied.</param>
967
- <param name="interceptor">The interceptor called during the invocation of proxied methods.</param>
1106
+ <param name="interceptor">The interceptors called during the invocation of proxied methods.</param>
968
1107
  <returns>
969
1108
  Object proxying calls to members of <paramref name="interfaceToProxy"/> type on generated target object.
970
1109
  </returns>
971
1110
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
972
- <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptor"/> object is a null reference (Nothing in Visual Basic).</exception>
1111
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptor"/> array is a null reference (Nothing in Visual Basic).</exception>
973
1112
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> is a generic type definition.</exception>
974
1113
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> is not an interface type.</exception>
975
1114
  <remarks>
@@ -1020,6 +1159,26 @@
1020
1159
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1021
1160
  </remarks>
1022
1161
  </member>
1162
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(System.Type,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
1163
+ <summary>
1164
+ Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on target object generated at runtime with given <paramref name="interceptors"/>.
1165
+ </summary>
1166
+ <param name="interfaceToProxy">Type of the interface which will be proxied.</param>
1167
+ <param name="options">The proxy generation options used to influence generated proxy type and object.</param>
1168
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1169
+ <returns>
1170
+ Object proxying calls to members of <paramref name="interfaceToProxy"/> on generated target object.
1171
+ </returns>
1172
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interfaceToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1173
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="interceptors"/> array is a null reference (Nothing in Visual Basic).</exception>
1174
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> is a generic type definition.</exception>
1175
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="interfaceToProxy"/> is not an interface type.</exception>
1176
+ <remarks>
1177
+ They are responsible for setting return value (and out parameters) on proxied methods. It is also illegal for an interceptor to call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/>, since there's no actual implementation to proceed with.
1178
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1179
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1180
+ </remarks>
1181
+ </member>
1023
1182
  <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
1024
1183
  <summary>
1025
1184
  Creates proxy object intercepting calls to members of interface <paramref name="interfaceToProxy"/> on target object generated at runtime with given <paramref name="interceptors"/>.
@@ -1052,27 +1211,26 @@
1052
1211
  New object of type <typeparamref name="TClass"/> proxying calls to virtual members of <typeparamref name="TClass"/> type.
1053
1212
  </returns>
1054
1213
  <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TClass"/> is not a class type.</exception>
1055
- <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on type <typeparamref name="TClass"/>.</exception>
1214
+ <exception cref="T:System.ArgumentException">Thrown when no default constructor exists on type <typeparamref name="TClass"/>.</exception>
1056
1215
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <typeparamref name="TClass"/> throws an exception.</exception>
1057
1216
  <remarks>
1058
1217
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1059
1218
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1060
1219
  </remarks>
1061
1220
  </member>
1062
- <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(System.Type,Castle.Core.Interceptor.IInterceptor[])">
1221
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateClassProxy``1(Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])">
1063
1222
  <summary>
1064
- Creates proxy object intercepting calls to virtual members of type <paramref name="classToProxy"/> on newly created instance of that type with given <paramref name="interceptors"/>.
1223
+ Creates proxy object intercepting calls to virtual members of type <typeparamref name="TClass"/> on newly created instance of that type with given <paramref name="interceptors"/>.
1065
1224
  </summary>
1066
- <param name="classToProxy">Type of class which will be proxied.</param>
1225
+ <typeparam name="TClass">Type of class which will be proxied.</typeparam>
1226
+ <param name="options">The proxy generation options used to influence generated proxy type and object.</param>
1067
1227
  <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1068
1228
  <returns>
1069
- New object of type <paramref name="classToProxy"/> proxying calls to virtual members of <paramref name="classToProxy"/> type.
1229
+ New object of type <typeparamref name="TClass"/> proxying calls to virtual members of <typeparamref name="TClass"/> type.
1070
1230
  </returns>
1071
- <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1072
- <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1073
- <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1074
- <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1075
- <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1231
+ <exception cref="T:System.ArgumentException">Thrown when given <typeparamref name="TClass"/> is not a class type.</exception>
1232
+ <exception cref="T:System.ArgumentException">Thrown when no default constructor exists on type <typeparamref name="TClass"/>.</exception>
1233
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <typeparamref name="TClass"/> throws an exception.</exception>
1076
1234
  <remarks>
1077
1235
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1078
1236
  As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
@@ -1091,7 +1249,7 @@
1091
1249
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1092
1250
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception>
1093
1251
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1094
- <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1252
+ <exception cref="T:System.ArgumentException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1095
1253
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1096
1254
  <remarks>
1097
1255
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
@@ -1111,7 +1269,67 @@
1111
1269
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1112
1270
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1113
1271
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1114
- <exception cref="T:System.MissingMethodException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1272
+ <exception cref="T:System.ArgumentException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1273
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1274
+ <remarks>
1275
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1276
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1277
+ </remarks>
1278
+ </member>
1279
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(System.Type,Castle.DynamicProxy.ProxyGenerationOptions,System.Object[],Castle.Core.Interceptor.IInterceptor[])">
1280
+ <summary>
1281
+ Creates proxy object intercepting calls to virtual members of type <paramref name="classToProxy"/> on newly created instance of that type with given <paramref name="interceptors"/>.
1282
+ </summary>
1283
+ <param name="classToProxy">Type of class which will be proxied.</param>
1284
+ <param name="options">The proxy generation options used to influence generated proxy type and object.</param>
1285
+ <param name="constructorArguments">Arguments of constructor of type <paramref name="classToProxy"/> which should be used to create a new instance of that type.</param>
1286
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1287
+ <returns>
1288
+ New object of type <paramref name="classToProxy"/> proxying calls to virtual members of <paramref name="classToProxy"/> type.
1289
+ </returns>
1290
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1291
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1292
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1293
+ <exception cref="T:System.ArgumentException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1294
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1295
+ <remarks>
1296
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1297
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1298
+ </remarks>
1299
+ </member>
1300
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(System.Type,System.Object[],Castle.Core.Interceptor.IInterceptor[])">
1301
+ <summary>
1302
+ Creates proxy object intercepting calls to virtual members of type <paramref name="classToProxy"/> on newly created instance of that type with given <paramref name="interceptors"/>.
1303
+ </summary>
1304
+ <param name="classToProxy">Type of class which will be proxied.</param>
1305
+ <param name="constructorArguments">Arguments of constructor of type <paramref name="classToProxy"/> which should be used to create a new instance of that type.</param>
1306
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1307
+ <returns>
1308
+ New object of type <paramref name="classToProxy"/> proxying calls to virtual members of <paramref name="classToProxy"/> type.
1309
+ </returns>
1310
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1311
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1312
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1313
+ <exception cref="T:System.ArgumentException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1314
+ <exception cref="T:System.Reflection.TargetInvocationException">Thrown when constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1315
+ <remarks>
1316
+ This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
1317
+ As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw.
1318
+ </remarks>
1319
+ </member>
1320
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(System.Type,Castle.Core.Interceptor.IInterceptor[])">
1321
+ <summary>
1322
+ Creates proxy object intercepting calls to virtual members of type <paramref name="classToProxy"/> on newly created instance of that type with given <paramref name="interceptors"/>.
1323
+ </summary>
1324
+ <param name="classToProxy">Type of class which will be proxied.</param>
1325
+ <param name="interceptors">The interceptors called during the invocation of proxied methods.</param>
1326
+ <returns>
1327
+ New object of type <paramref name="classToProxy"/> proxying calls to virtual members of <paramref name="classToProxy"/> type.
1328
+ </returns>
1329
+ <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="classToProxy"/> object is a null reference (Nothing in Visual Basic).</exception>
1330
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1331
+ <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1332
+ <exception cref="T:System.ArgumentException">Thrown when no parameterless constructor exists on type <paramref name="classToProxy"/>.</exception>
1115
1333
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1116
1334
  <remarks>
1117
1335
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
@@ -1132,7 +1350,7 @@
1132
1350
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="options"/> object is a null reference (Nothing in Visual Basic).</exception>
1133
1351
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is a generic type definition.</exception>
1134
1352
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1135
- <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1353
+ <exception cref="T:System.ArgumentException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1136
1354
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1137
1355
  <remarks>
1138
1356
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
@@ -1154,7 +1372,7 @@
1154
1372
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="options"/> object is a null reference (Nothing in Visual Basic).</exception>
1155
1373
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception>
1156
1374
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1157
- <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1375
+ <exception cref="T:System.ArgumentException">Thrown when no default constructor exists on type <paramref name="classToProxy"/>.</exception>
1158
1376
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1159
1377
  <remarks>
1160
1378
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
@@ -1177,7 +1395,7 @@
1177
1395
  <exception cref="T:System.ArgumentNullException">Thrown when given <paramref name="options"/> object is a null reference (Nothing in Visual Basic).</exception>
1178
1396
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception>
1179
1397
  <exception cref="T:System.ArgumentException">Thrown when given <paramref name="classToProxy"/> is not a class type.</exception>
1180
- <exception cref="T:System.MissingMethodException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1398
+ <exception cref="T:System.ArgumentException">Thrown when no constructor exists on type <paramref name="classToProxy"/> with parameters matching <paramref name="constructorArguments"/>.</exception>
1181
1399
  <exception cref="T:System.Reflection.TargetInvocationException">Thrown when constructor of type <paramref name="classToProxy"/> throws an exception.</exception>
1182
1400
  <remarks>
1183
1401
  This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type.
@@ -1203,13 +1421,12 @@
1203
1421
  <param name="options">The options for proxy generation process.</param>
1204
1422
  <returns><see cref="T:System.Type"/> of proxy.</returns>
1205
1423
  </member>
1206
- <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithTargetInterface(System.Type,System.Type[],System.Type,Castle.DynamicProxy.ProxyGenerationOptions)">
1424
+ <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithTargetInterface(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)">
1207
1425
  <summary>
1208
1426
  Creates the proxy type for interface proxy with target interface for given <paramref name="interfaceToProxy"/> interface, implementing given <paramref name="additionalInterfacesToProxy"/> on given <paramref name="targetType"/> and using provided <paramref name="options"/>.
1209
1427
  </summary>
1210
1428
  <param name="interfaceToProxy">The interface proxy type should implement.</param>
1211
1429
  <param name="additionalInterfacesToProxy">The additional interfaces proxy type should implement.</param>
1212
- <param name="targetType">Actual type that the proxy type will encompass.</param>
1213
1430
  <param name="options">The options for proxy generation process.</param>
1214
1431
  <returns><see cref="T:System.Type"/> of proxy.</returns>
1215
1432
  </member>
@@ -1222,6 +1439,11 @@
1222
1439
  <param name="options">The options for proxy generation process.</param>
1223
1440
  <returns><see cref="T:System.Type"/> of proxy.</returns>
1224
1441
  </member>
1442
+ <member name="P:Castle.DynamicProxy.ProxyGenerator.Logger">
1443
+ <summary>
1444
+ Gets or sets the <see cref="T:Castle.Core.Logging.ILogger"/> that this <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> log to.
1445
+ </summary>
1446
+ </member>
1225
1447
  <member name="P:Castle.DynamicProxy.ProxyGenerator.ProxyBuilder">
1226
1448
  <summary>
1227
1449
  Gets the proxy builder instance used to generate proxy types.