From: <aye...@us...> - 2010-02-01 12:06:41
|
Revision: 4941 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4941&view=rev Author: ayenderahien Date: 2010-02-01 12:06:34 +0000 (Mon, 01 Feb 2010) Log Message: ----------- Upgrading to Castle Dynamic Proxy 2.2 Modified Paths: -------------- trunk/nhibernate/lib/net/3.5/Castle.Core.dll trunk/nhibernate/lib/net/3.5/Castle.Core.xml trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.dll trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.xml Modified: trunk/nhibernate/lib/net/3.5/Castle.Core.dll =================================================================== (Binary files differ) Modified: trunk/nhibernate/lib/net/3.5/Castle.Core.xml =================================================================== --- trunk/nhibernate/lib/net/3.5/Castle.Core.xml 2010-01-27 15:58:40 UTC (rev 4940) +++ trunk/nhibernate/lib/net/3.5/Castle.Core.xml 2010-02-01 12:06:34 UTC (rev 4941) @@ -220,52 +220,189 @@ </summary> <value>The type of the lifestyle handler.</value> </member> + <member name="T:Castle.DynamicProxy.IAttributeDisassembler"> + <summary> + Provides functionality for disassembling instances of attributes to CustomAttributeBuilder form, during the process of emiting new types by Dynamic Proxy. + </summary> + </member> + <member name="M:Castle.DynamicProxy.IAttributeDisassembler.Disassemble(System.Attribute)"> + <summary> + Disassembles given attribute instance back to corresponding CustomAttributeBuilder. + </summary> + <param name="attribute">An instance of attribute to disassemble</param> + <returns><see cref="T:System.Reflection.Emit.CustomAttributeBuilder"/> corresponding 1 to 1 to given attribute instance, or null reference.</returns> + <remarks> + Implementers should return <see cref="T:System.Reflection.Emit.CustomAttributeBuilder"/> that corresponds to given attribute instance 1 to 1, + that is after calling specified constructor with specified arguments, and setting specified properties and fields with values specified + we should be able to get an attribute instance identical to the one passed in <paramref name="attribute"/>. Implementer can return null + if it wishes to opt out of replicating the attribute. Notice however, that for some cases, like attributes passed explicitly by the user + it is illegal to return null, and doing so will result in exception. + </remarks> + </member> + <member name="T:Castle.Core.Interceptor.IChangeProxyTarget"> + <summary> + Exposes means to change target objects of proxies and invocations + </summary> + </member> + <member name="M:Castle.Core.Interceptor.IChangeProxyTarget.ChangeInvocationTarget(System.Object)"> + <summary> + Changes the target object (<see cref="P:Castle.Core.Interceptor.IInvocation.InvocationTarget"/>) of current <see cref="T:Castle.Core.Interceptor.IInvocation"/>. + </summary> + <param name="target">The new value of target of invocation.</param> + <remarks> + Although the method takes <see cref="T:System.Object"/> the actual instance must be of type assignable to <see cref="P:Castle.Core.Interceptor.IInvocation.TargetType"/>, otherwise an <see cref="T:System.InvalidCastException"/> will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as <paramref name="target"/>, for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/> or a <see cref="T:System.NotImplementedException"/> will be throws. + Also while it's technically legal to pass proxy itself as <paramref name="target"/>, this would create stack overflow. + In this case last interceptor in the pipeline mustn't call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/> or a <see cref="T:System.InvalidOperationException"/> will be throws. + </remarks> + <exception cref="T:System.InvalidCastException">Thrown when <paramref name="target"/> is not assignable to the proxied type.</exception> + </member> + <member name="M:Castle.Core.Interceptor.IChangeProxyTarget.ChangeProxyTarget(System.Object)"> + <summary> + Permanently changes the target object of the proxy. This does not affect target of the current invocation. + </summary> + <param name="target">The new value of target of the proxy.</param> + <remarks> + Although the method takes <see cref="T:System.Object"/> the actual instance must be of type assignable to proxy's target type, otherwise an <see cref="T:System.InvalidCastException"/> will be thrown. + Also while it's technically legal to pass null reference (Nothing in Visual Basic) as <paramref name="target"/>, for obvious reasons Dynamic Proxy will not be able to call the intercepted method on such target. + In this case last interceptor in the pipeline mustn't call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/> or a <see cref="T:System.NotImplementedException"/> will be throws. + Also while it's technically legal to pass proxy itself as <paramref name="target"/>, this would create stack overflow. + In this case last interceptor in the pipeline mustn't call <see cref="M:Castle.Core.Interceptor.IInvocation.Proceed"/> or a <see cref="T:System.InvalidOperationException"/> will be throws. + </remarks> + <exception cref="T:System.InvalidCastException">Thrown when <paramref name="target"/> is not assignable to the proxied type.</exception> + </member> <member name="T:Castle.Core.Interceptor.IInterceptor"> <summary> New interface that is going to be used by DynamicProxy 2 </summary> </member> + <member name="T:Castle.Core.Interceptor.IInterceptorSelector"> + <summary> + Provides an extension point that allows proxies to choose specific interceptors on + a per method basis. + </summary> + </member> + <member name="M:Castle.Core.Interceptor.IInterceptorSelector.SelectInterceptors(System.Type,System.Reflection.MethodInfo,Castle.Core.Interceptor.IInterceptor[])"> + <summary> + Selects the interceptors that should intercept calls to the given <paramref name="method"/>. + </summary> + <param name="type">The type declaring the method to intercept.</param> + <param name="method">The method that will be intercepted.</param> + <param name="interceptors">All interceptors registered with the proxy.</param> + <returns>An array of interceptors to invoke upon calling the <paramref name="method"/>.</returns> + <remarks> + This method is called only once per proxy instance, upon the first call to the + <paramref name="method"/>. Either an empty array or null are valid return values to indicate + that no interceptor should intercept calls to the method. Although it is not advised, it is + legal to return other <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementations than these provided in + <paramref name="interceptors"/>. + </remarks> + </member> <member name="T:Castle.Core.Interceptor.IInvocation"> <summary> - New interface that is going to be used by DynamicProxy 2 + Encapsulates an invocation of a proxied method. </summary> </member> + <member name="M:Castle.Core.Interceptor.IInvocation.SetArgumentValue(System.Int32,System.Object)"> + <summary> + Overrides the value of an argument at the given <paramref name="index"/> with the + new <paramref name="value"/> provided. + </summary> + <remarks> + This method accepts an <see cref="T:System.Object"/>, however the value provided must be compatible + with the type of the argument defined on the method, otherwise an exception will be thrown. + </remarks> + <param name="index">The index of the argument to override.</param> + <param name="value">The new value for the argument.</param> + </member> + <member name="M:Castle.Core.Interceptor.IInvocation.GetArgumentValue(System.Int32)"> + <summary> + Gets the value of the argument at the specified <paramref name="index"/>. + </summary> + <param name="index">The index.</param> + <returns>The value of the argument at the specified <paramref name="index"/>.</returns> + </member> <member name="M:Castle.Core.Interceptor.IInvocation.GetConcreteMethod"> <summary> - Returns the concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/>, with any generic parameters bound to real types. + Returns the concrete instantiation of the <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/>, with any generic + parameters bound to real types. </summary> - <returns>The concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/>, or <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/> if not a generic method.</returns> + <returns> + The concrete instantiation of the <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/>, or the <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/> if + not a generic method. + </returns> <remarks>Can be slower than calling <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/>.</remarks> </member> <member name="M:Castle.Core.Interceptor.IInvocation.GetConcreteMethodInvocationTarget"> <summary> - Returns the concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/>, with any generic parameters bound to real types. + Returns the concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/>, with any + generic parameters bound to real types. </summary> - <returns>The concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/>, or <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/> if not a generic method.</returns> + <returns>The concrete instantiation of <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/>, or + <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/> if not a generic method.</returns> <remarks>Can be slower than calling <see cref="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"/>.</remarks> </member> <member name="M:Castle.Core.Interceptor.IInvocation.Proceed"> <summary> - + Proceeds the call to the next interceptor in line, and ultimately to the target method. </summary> - <returns></returns> + <remarks> + Since interface proxies without a target don't have the target implementation to proceed to, + it is important, that the last interceptor does not call this method, otherwise a + <see cref="T:System.NotImplementedException"/> will be thrown. + </remarks> </member> + <member name="P:Castle.Core.Interceptor.IInvocation.Proxy"> + <summary> + Gets the proxy object on which the intercepted method is invoked. + </summary> + <value>Proxy object on which the intercepted method is invoked.</value> + </member> + <member name="P:Castle.Core.Interceptor.IInvocation.InvocationTarget"> + <summary> + Gets the object on which the invocation is performed. This is different from proxy object + because most of the time this will be the proxy target object. + </summary> + <seealso cref="T:Castle.Core.Interceptor.IChangeProxyTarget"/> + <value>The invocation target.</value> + </member> + <member name="P:Castle.Core.Interceptor.IInvocation.TargetType"> + <summary> + Gets the type of the target object for the intercepted method. + </summary> + <value>The type of the target object.</value> + </member> + <member name="P:Castle.Core.Interceptor.IInvocation.Arguments"> + <summary> + Gets the arguments that the <see cref="P:Castle.Core.Interceptor.IInvocation.Method"/> has been invoked with. + </summary> + <value>The arguments the method was invoked with.</value> + </member> <member name="P:Castle.Core.Interceptor.IInvocation.GenericArguments"> <summary> - The generic arguments of the method, or null if not a generic method. + Gets the generic arguments of the method. </summary> + <value>The generic arguments, or null if not a generic method.</value> </member> <member name="P:Castle.Core.Interceptor.IInvocation.Method"> <summary> - + Gets the <see cref="T:System.Reflection.MethodInfo"/> representing the method being invoked. </summary> + <value>The <see cref="T:System.Reflection.MethodInfo"/> representing the method being invoked.</value> </member> <member name="P:Castle.Core.Interceptor.IInvocation.MethodInvocationTarget"> <summary> - For interface proxies, this will point to the - <see cref="T:System.Reflection.MethodInfo"/> on the target class + For interface proxies, this will point to the <see cref="T:System.Reflection.MethodInfo"/> on the target class. </summary> + <value>The method invocation target.</value> </member> + <member name="P:Castle.Core.Interceptor.IInvocation.ReturnValue"> + <summary> + Gets or sets the return value of the method. + </summary> + <value>The return value of the method.</value> + </member> <member name="T:Castle.Core.Interceptor.IOnBehalfAware"> <summary> Interceptors might implement this to receive the @@ -348,6 +485,12 @@ If the index is invalid. </exception> </member> + <member name="M:Castle.Core.Internal.Lock.Create"> + <summary> + Creates a new lock. + </summary> + <returns></returns> + </member> <member name="T:Castle.Core.IInitializable"> <summary> Lifecycle interface. If implemented by a component, @@ -2077,14 +2220,14 @@ instance in a pool instead of always creating them. </summary> </member> - <member name="F:Castle.Core.LifestyleType.Custom"> + <member name="F:Castle.Core.LifestyleType.PerWebRequest"> <summary> - Any other logic to create/release components. + PerWebRequest components are created once per Http Request </summary> </member> - <member name="F:Castle.Core.LifestyleType.PerWebRequest"> + <member name="F:Castle.Core.LifestyleType.Custom"> <summary> - PerWebRequest components are created once per Http Request + Any other logic to create/release components. </summary> </member> <member name="T:Castle.Core.PropertiesInspectionBehavior"> @@ -2716,11 +2859,6 @@ Collection of <see cref="T:Castle.Core.ParameterModel"/> </summary> </member> - <member name="M:Castle.Core.ParameterModelCollection.#ctor"> - <summary> - Initializes a new instance of the <see cref="T:Castle.Core.ParameterModelCollection"/> class. - </summary> - </member> <member name="M:Castle.Core.ParameterModelCollection.Add(System.String,System.String)"> <summary> Adds the specified name. @@ -3001,6 +3139,126 @@ Enable access to files on network shares </summary> </member> + <member name="T:Castle.Core.Smtp.DefaultSmtpSender"> + <summary> + Default <see cref="T:Castle.Core.Smtp.IEmailSender"/> implementation. + </summary> + </member> + <member name="T:Castle.Core.Smtp.IEmailSender"> + <summary> + Email sender abstraction. + </summary> + </member> + <member name="M:Castle.Core.Smtp.IEmailSender.Send(System.String,System.String,System.String,System.String)"> + <summary> + Sends a mail message. + </summary> + <param name="from">From field</param> + <param name="to">To field</param> + <param name="subject">E-mail's subject</param> + <param name="messageText">message's body</param> + </member> + <member name="M:Castle.Core.Smtp.IEmailSender.Send(System.Net.Mail.MailMessage)"> + <summary> + Sends a <see cref="T:System.Net.Mail.MailMessage">message</see>. + </summary> + <param name="message"><see cref="T:System.Net.Mail.MailMessage">Message</see> instance</param> + </member> + <member name="M:Castle.Core.Smtp.IEmailSender.Send(System.Collections.Generic.IEnumerable{System.Net.Mail.MailMessage})"> + <summary> + Sends multiple <see cref="T:System.Net.Mail.MailMessage">messages</see>. + </summary> + <param name="messages">List of <see cref="T:System.Net.Mail.MailMessage">messages</see></param> + </member> + <member name="M:Castle.Core.Smtp.DefaultSmtpSender.#ctor(System.String)"> + <summary> + This service implementation + requires a host name in order to work + </summary> + <param name="hostname">The smtp server name</param> + </member> + <member name="M:Castle.Core.Smtp.DefaultSmtpSender.Send(System.String,System.String,System.String,System.String)"> + <summary> + Sends a message. + </summary> + <exception cref="T:System.ArgumentNullException">If any of the parameters is null</exception> + <param name="from">From field</param> + <param name="to">To field</param> + <param name="subject">e-mail's subject</param> + <param name="messageText">message's body</param> + </member> + <member name="M:Castle.Core.Smtp.DefaultSmtpSender.Send(System.Net.Mail.MailMessage)"> + <summary> + Sends a message. + </summary> + <exception cref="T:System.ArgumentNullException">If the message is null</exception> + <param name="message">Message instance</param> + </member> + <member name="M:Castle.Core.Smtp.DefaultSmtpSender.Configure(System.Net.Mail.SmtpClient)"> + <summary> + Configures the sender + with port information and eventual credential + informed + </summary> + <param name="smtpClient">Message instance</param> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.Port"> + <summary> + Gets or sets the port used to + access the SMTP server + </summary> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.Hostname"> + <summary> + Gets the hostname. + </summary> + <value>The hostname.</value> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.AsyncSend"> + <summary> + Gets or sets a value which is used to + configure if emails are going to be sent asyncrhonously or not. + </summary> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.Timeout"> + <summary> + Gets or sets a value that specifies + the amount of time after which a synchronous Send call times out. + </summary> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.UseSsl"> + <summary> + Gets or sets a value indicating whether the email should be sent using + a secure communication channel. + </summary> + <value><c>true</c> if should use SSL; otherwise, <c>false</c>.</value> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.Domain"> + <summary> + Gets or sets the domain. + </summary> + <value>The domain.</value> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.UserName"> + <summary> + Gets or sets the name of the user. + </summary> + <value>The name of the user.</value> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.Password"> + <summary> + Gets or sets the password. + </summary> + <value>The password.</value> + </member> + <member name="P:Castle.Core.Smtp.DefaultSmtpSender.HasCredentials"> + <summary> + Gets a value indicating whether credentials were informed. + </summary> + <value> + <see langword="true"/> if this instance has credentials; otherwise, <see langword="false"/>. + </value> + </member> <member name="T:Castle.Core.IServiceEnabledComponent"> <summary> Defines that the implementation wants a Modified: trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.dll =================================================================== (Binary files differ) Modified: trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.xml =================================================================== --- trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.xml 2010-01-27 15:58:40 UTC (rev 4940) +++ trunk/nhibernate/lib/net/3.5/Castle.DynamicProxy2.xml 2010-02-01 12:06:34 UTC (rev 4941) @@ -4,42 +4,42 @@ <name>Castle.DynamicProxy2</name> </assembly> <members> - <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.IndirectReference"> + <member name="M:Castle.DynamicProxy.Contributors.MembersCollector.IsAccessible(System.Reflection.MethodBase)"> <summary> - Wraps a reference that is passed - ByRef and provides indirect load/store support. + Checks if the method is public or protected. </summary> + <param name="method"></param> + <returns></returns> </member> - <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.NewArrayExpression"> + <member name="M:Castle.DynamicProxy.Contributors.MembersCollector.AcceptMethod(System.Reflection.MethodInfo,System.Boolean,Castle.DynamicProxy.IProxyGenerationHook)"> <summary> - Summary description for NewArrayExpression. + Performs some basic screening and invokes the <see cref="T:Castle.DynamicProxy.IProxyGenerationHook"/> + to select methods. </summary> + <param name="method"></param> + <param name="onlyVirtuals"></param> + <param name="hook"></param> + <returns></returns> </member> - <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.ReferencesToObjectArrayExpression"> + <member name="T:Castle.DynamicProxy.Contributors.ITypeContributor"> <summary> - + Interface describing elements composing generated type </summary> </member> - <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.InitializeConstructorArgs(System.Type,System.Attribute,System.Object[],System.Reflection.ParameterInfo[])"> + <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.IndirectReference"> <summary> - Here we try to match a constructor argument to its value. - Since we can't get the values from the assembly, we use some heuristics to get it. - a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument - b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). + Wraps a reference that is passed + ByRef and provides indirect load/store support. </summary> </member> - <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.ReplaceIfBetterMatch(System.Reflection.ParameterInfo,System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)"> + <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.NewArrayExpression"> <summary> - We have the following rules here. - Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that - we can convert it. + Summary description for NewArrayExpression. </summary> </member> - <member name="M:Castle.DynamicProxy.Generators.Emitters.CustomAttributeUtil.ConvertValue(System.Object,System.Type)"> + <member name="T:Castle.DynamicProxy.Generators.Emitters.SimpleAST.ReferencesToObjectArrayExpression"> <summary> - Attributes can only accept simple types, so we return null for null, - if the value is passed as string we call to string (should help with converting), - otherwise, we use the value as is (enums, integer, etc). + </summary> </member> <member name="T:Castle.DynamicProxy.Generators.Emitters.LdcOpCodesDictionary"> @@ -103,161 +103,138 @@ for the type of primitive value to be stored indirectly. </summary> </member> - <member name="T:Castle.DynamicProxy.Generators.BaseProxyGenerator"> + <member name="M:Castle.DynamicProxy.Generators.Emitters.TypeUtil.GetAllInterfaces(System.Type[])"> <summary> - Base class that exposes the common functionalities - to proxy generation. + Returns list of all unique interfaces implemented given types, including their base interfaces. </summary> - <remarks> - TODO: - - Add tests and fixes for 'leaking this' problem - </remarks> - </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GetProxyTargetReference"> - <summary> - Used by dinamically implement <see cref="T:Castle.Core.Interceptor.IProxyTargetAccessor"/> - </summary> + <param name="types"></param> <returns></returns> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GenerateParameterlessConstructor(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference)"> + <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.HandleError(System.Type,System.Exception)"> <summary> - Generates a parameters constructor that initializes the proxy - state with <see cref="T:Castle.Core.Interceptor.StandardInterceptor"/> just to make it non-null. - <para> - This constructor is important to allow proxies to be XML serializable - </para> + Handles error during disassembly process </summary> + <param name="attributeType">Type of the attribute being disassembled</param> + <param name="exception">Exception thrown during the process</param> + <returns>usually null, or (re)throws the exception</returns> </member> - <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)"> + <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.InitializeConstructorArgs(System.Type,System.Attribute,System.Object[],System.Reflection.ParameterInfo[])"> <summary> - If callbackMethod is null the InvokeOnTarget implementation - is just the code to throw an exception + Here we try to match a constructor argument to its value. + Since we can't get the values from the assembly, we use some heuristics to get it. + a/ we first try to match all the properties on the attributes by name (case insensitive) to the argument + b/ if we fail we try to match them by property type, with some smarts about convertions (i,e: can use Guid for string). </summary> - <param name="emitter"></param> - <param name="targetType"></param> - <param name="targetForInvocation"></param> - <param name="methodInfo"></param> - <param name="callbackMethod"></param> - <param name="version"></param> - <returns></returns> </member> - <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)"> + <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.ReplaceIfBetterMatch(System.Reflection.ParameterInfo,System.Reflection.PropertyInfo,System.Reflection.PropertyInfo)"> <summary> - If callbackMethod is null the InvokeOnTarget implementation - is just the code to throw an exception + We have the following rules here. + Try to find a matching type, failing that, if the parameter is string, get the first property (under the assumption that + we can convert it. </summary> - <param name="emitter"></param> - <param name="targetType"></param> - <param name="targetForInvocation"></param> - <param name="methodInfo"></param> - <param name="callbackMethod"></param> - <param name="version"></param> - <param name="allowChangeTarget">If true the invocation will implement the IChangeProxyTarget interface</param> - <returns></returns> </member> - <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)"> + <member name="M:Castle.DynamicProxy.Generators.AttributeDisassembler.ConvertValue(System.Object,System.Type)"> <summary> - Generates the constructor for the nested class that extends - <see cref="T:Castle.DynamicProxy.AbstractInvocation"/> + Attributes can only accept simple types, so we return null for null, + if the value is passed as string we call to string (should help with converting), + otherwise, we use the value as is (enums, integer, etc). </summary> - <param name="targetFieldType"></param> - <param name="nested"></param> - <param name="targetField"></param> - <param name="version"></param> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.CreateInitializeCacheMethodBody(System.Type,System.Reflection.MethodInfo[],Castle.DynamicProxy.Generators.Emitters.ClassEmitter,Castle.DynamicProxy.Generators.Emitters.ConstructorEmitter)"> + <member name="T:Castle.DynamicProxy.Generators.BaseProxyGenerator"> <summary> - Improvement: this cache should be static. We should generate a - type constructor instead + Base class that exposes the common functionalities + to proxy generation. </summary> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.AcceptMethod(System.Reflection.MethodInfo,System.Boolean)"> + <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.GenerateParameterlessConstructor(Castle.DynamicProxy.Generators.Emitters.ClassEmitter,System.Type,Castle.DynamicProxy.Generators.Emitters.SimpleAST.FieldReference)"> <summary> - Performs some basic screening and invokes the <see cref="T:Castle.DynamicProxy.IProxyGenerationHook"/> - to select methods. + Generates a parameters constructor that initializes the proxy + state with <see cref="T:Castle.Core.Interceptor.StandardInterceptor"/> just to make it non-null. + <para> + This constructor is important to allow proxies to be XML serializable + </para> </summary> - <param name="method"></param> - <param name="onlyVirtuals"></param> - <returns></returns> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.IsAccessible(System.Reflection.MethodInfo)"> + <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.AddMappingNoCheck(System.Type,Castle.DynamicProxy.Contributors.ITypeContributor,System.Collections.Generic.IDictionary{System.Type,Castle.DynamicProxy.Contributors.ITypeContributor})"> <summary> - Checks if the method is public or protected. + It is safe to add mapping (no mapping for the interface exists) </summary> - <param name="method"></param> - <returns></returns> + <param name="implementer"></param> + <param name="interface"></param> + <param name="mapping"></param> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.ShouldSkipAttributeReplication(System.Attribute)"> + <member name="M:Castle.DynamicProxy.Generators.CacheKey.#ctor(System.Reflection.MemberInfo,System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)"> <summary> - Attributes should be replicated if they are non-inheritable, - but there are some special cases where the attributes means - something to the CLR, where they should be skipped. + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.CacheKey"/> class. </summary> + <param name="target">Target element. This is either target type or target method for invocation types.</param> + <param name="type">The type of the proxy. This is base type for invocation types.</param> + <param name="interfaces">The interfaces.</param> + <param name="options">The options.</param> </member> - <member name="M:Castle.DynamicProxy.Generators.BaseProxyGenerator.ShouldCreateNewSlot(System.Reflection.MethodInfo)"> - <summary> - Checks if the method has the same signature as a method that was marked as - one that should generate a new vtable slot. - </summary> - </member> <member name="M:Castle.DynamicProxy.Generators.CacheKey.#ctor(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)"> <summary> Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.CacheKey"/> class. </summary> - <param name="targetType">Type of the target.</param> + <param name="target">Type of the target.</param> <param name="interfaces">The interfaces.</param> <param name="options">The options.</param> </member> - <member name="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"> + <member name="M:Castle.DynamicProxy.Generators.InvocationTypeGenerator.GetCtorArgumentsAndBaseCtorToCall(System.Type,Castle.DynamicProxy.ProxyGenerationOptions,System.Reflection.ConstructorInfo@)"> <summary> - + Generates the constructor for the class that extends + <see cref="T:Castle.DynamicProxy.AbstractInvocation"/> </summary> + <param name="targetFieldType"></param> + <param name="proxyGenerationOptions"></param> + <param name="baseConstructor"></param> </member> - <member name="M:Castle.DynamicProxy.Generators.EventToGenerate.#ctor(Castle.DynamicProxy.Generators.Emitters.EventEmitter,System.Reflection.MethodInfo,System.Reflection.MethodInfo,System.Reflection.EventAttributes)"> + <member name="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"> <summary> - Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.EventToGenerate"/> class. + </summary> - <param name="emitter">The emitter.</param> - <param name="addMethod">The add method.</param> - <param name="removeMethod">The remove method.</param> - <param name="attributes">The attributes.</param> </member> - <member name="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator"> + <member name="T:Castle.DynamicProxy.Generators.INamingScope"> <summary> - + Represents the scope of uniquenes of names for types and their members </summary> </member> - <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.FindMethodOnTargetType(System.Reflection.MethodInfo,System.Type,System.Boolean)"> + <member name="M:Castle.DynamicProxy.Generators.INamingScope.GetUniqueName(System.String)"> <summary> - Finds the type of the method on target. + Gets a unique name based on <paramref name="suggestedName"/> </summary> - <param name="methodOnInterface">The method on interface.</param> - <param name="proxyTargetType">Type of the proxy target.</param> - /// <param name="checkMixins">if set to <c>true</c> will check implementation on mixins.</param> - <returns></returns> + <param name="suggestedName">Name suggested by the caller</param> + <returns>Unique name based on <paramref name="suggestedName"/>.</returns> + <remarks> + Implementers should provide name as closely resembling <paramref name="suggestedName"/> as possible. + Generally if no collision occurs it is suggested to return suggested name, otherwise append sequential suffix. + Implementers must return deterministic names, that is when <see cref="M:Castle.DynamicProxy.Generators.INamingScope.GetUniqueName(System.String)"/> is called twice + with the same suggested name, the same returned name should be provided each time. Non-deterministic return + values, like appending random suffices will break serialization of proxies. + </remarks> </member> - <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.IsTypeEquivalent(System.Type,System.Type)"> + <member name="M:Castle.DynamicProxy.Generators.INamingScope.SafeSubScope"> <summary> - Checks whether the given types are the same. This is - more complicated than it looks. + Returns new, disposable naming scope. It is responsibilty of the caller to make sure that no naming collision + with enclosing scope, or other subscopes is possible. </summary> - <param name="sourceType"></param> - <param name="targetType"></param> - <returns></returns> + <returns>New naming scope.</returns> </member> - <member name="M:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.IsMethodEquivalent(System.Reflection.MethodInfo,System.Reflection.MethodInfo)"> + <member name="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator"> <summary> - Checks whether the given methods are the same. + </summary> - <param name="methodInfo"></param> - <param name="methodOnInterface"></param> - <returns>True if the methods are the same.</returns> </member> - <member name="T:Castle.DynamicProxy.Generators.InterfaceGeneratorType"> + <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)"> <summary> - This is used by the ProxyObjectReference class durin de-serialiation, to know - which generator it should use + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.Generators.MetaEvent"/> class. </summary> + <param name="name">The name.</param> + <param name="declaringType">Type declaring the original event being overriten, or null.</param> + <param name="eventDelegateType"></param> + <param name="adder">The add method.</param> + <param name="remover">The remove method.</param> + <param name="attributes">The attributes.</param> </member> <member name="T:Castle.DynamicProxy.Generators.MethodFinder"> <summary> @@ -292,6 +269,41 @@ 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 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> </member> + <member name="T:Castle.DynamicProxy.Tokens.InvocationMethods"> + <summary> + Holds <see cref="T:System.Reflection.MethodInfo"/> objects representing methods of <see cref="T:Castle.DynamicProxy.AbstractInvocation"/> class. + </summary> + </member> + <member name="T:Castle.DynamicProxy.Tokens.SerializationInfoMethods"> + <summary> + Holds <see cref="T:System.Reflection.MethodInfo"/> objects representing methods of <see cref="T:System.Runtime.Serialization.SerializationInfo"/> class. + </summary> + </member> + <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Bool"> + <summary> + <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Boolean)"/> + </summary> + </member> + <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Int32"> + <summary> + <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Int32)"/> + </summary> + </member> + <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.AddValue_Object"> + <summary> + <see cref="M:System.Runtime.Serialization.SerializationInfo.AddValue(System.String,System.Object)"/> + </summary> + </member> + <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.GetValue"> + <summary> + <see cref="M:System.Runtime.Serialization.SerializationInfo.GetValue(System.String,System.Type)"/> + </summary> + </member> + <member name="F:Castle.DynamicProxy.Tokens.SerializationInfoMethods.SetType"> + <summary> + <see cref="M:System.Runtime.Serialization.SerializationInfo.SetType(System.Type)"/> + </summary> + </member> <member name="T:Castle.DynamicProxy.IProxyGenerationHook"> <summary> Used during the target type inspection process. Implementors have a chance to customize the @@ -323,6 +335,24 @@ Invoked by the generation process to notify that the whole process has completed. </summary> </member> + <member name="M:Castle.DynamicProxy.AttributeUtil.AddDisassembler``1(Castle.DynamicProxy.IAttributeDisassembler)"> + <summary> + Registers custom disassembler to handle disassembly of specified type of attributes. + </summary> + <typeparam name="TAttribute">Type of attributes to handle</typeparam> + <param name="disassembler">Disassembler converting existing instances of Attributes to CustomAttributeBuilders</param> + <remarks> + When disassembling an attribute Dynamic Proxy will first check if an custom disassembler has been registered to handle attributes of that type, + and if none is found, it'll use the <see cref="P:Castle.DynamicProxy.AttributeUtil.FallbackDisassembler"/>. + </remarks> + </member> + <member name="M:Castle.DynamicProxy.AttributeUtil.ShouldSkipAttributeReplication(System.Type)"> + <summary> + Attributes should be replicated if they are non-inheritable, + but there are some special cases where the attributes means + something to the CLR, where they should be skipped. + </summary> + </member> <member name="T:Castle.DynamicProxy.CacheMappingsAttribute"> <summary> 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 @@ pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception> <seealso cref="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"/> </member> + <member name="M:Castle.DynamicProxy.IProxyBuilder.CreateClassProxyType(System.Type,System.Type[],Castle.DynamicProxy.ProxyGenerationOptions)"> + <summary> + Creates a proxy type for given <paramref name="classToProxy"/>, implementing <paramref name="additionalInterfacesToProxy"/>, using <paramref name="options"/> provided. + </summary> + <param name="classToProxy">The class type to proxy.</param> + <param name="additionalInterfacesToProxy">Additional interface types to proxy.</param> + <param name="options">The proxy generation options.</param> + <returns>The generated proxy type.</returns> + <remarks> + Implementers should return a proxy type for the specified class and interfaces. + 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.) + </remarks> + <exception cref="T:Castle.DynamicProxy.Generators.GeneratorException">Thrown when <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is a generic type definition.</exception> + <exception cref="T:Castle.DynamicProxy.Generators.GeneratorException">Thrown when <paramref name="classToProxy"/> or any of <paramref name="additionalInterfacesToProxy"/> is not public. + Note that to avoid this exception, you can mark offending type internal, and define <see cref="T:System.Runtime.CompilerServices.InternalsVisibleToAttribute"/> + pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception> + <seealso cref="T:Castle.DynamicProxy.Generators.ClassProxyGenerator"/> + </member> <member name="M:Castle.DynamicProxy.IProxyBuilder.CreateInterfaceProxyTypeWithTarget(System.Type,System.Type[],System.Type,Castle.DynamicProxy.ProxyGenerationOptions)"> <summary> 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 @@ pointing to Castle Dynamic Proxy assembly, in assembly containing that type, if this is appropriate.</exception> <seealso cref="T:Castle.DynamicProxy.Generators.InterfaceProxyWithTargetInterfaceGenerator"/> </member> + <member name="P:Castle.DynamicProxy.IProxyBuilder.Logger"> + <summary> + Gets or sets the <see cref="T:Castle.Core.Logging.ILogger"/> that this <see cref="T:Castle.DynamicProxy.ProxyGenerator"/> logs to. + </summary> + </member> <member name="P:Castle.DynamicProxy.IProxyBuilder.ModuleScope"> <summary> Gets the <see cref="P:Castle.DynamicProxy.IProxyBuilder.ModuleScope"/> associated with this builder. @@ -441,33 +494,6 @@ </summary> <param name="scope">The module scope for generated proxy types.</param> </member> - <member name="T:Castle.DynamicProxy.IInterceptorSelector"> - <summary> - Provides an extension point that allows proxies to choose specific interceptors on - a per method basis. - </summary> - </member> - <member name="M:Castle.DynamicProxy.IInterceptorSelector.SelectInterceptors(System.Type,System.Reflection.MethodInfo,Castle.Core.Interceptor.IInterceptor[])"> - <summary> - Selects the interceptors that should intercept calls to the given <paramref name="method"/>. - </summary> - <param name="type">The type declaring the method to intercept.</param> - <param name="method">The method that will be intercepted.</param> - <param name="interceptors">All interceptors registered with the proxy.</param> - <returns>An array of interceptors to invoke upon calling the <paramref name="method"/>.</returns> - <remarks> - This method is called only once per proxy instance, upon the first call to the - <paramref name="method"/>. Either an empty array or null are valid return values to indicate - that no interceptor should intercept calls to the method. Although it is not advised, it is - legal to return other <see cref="T:Castle.Core.Interceptor.IInterceptor"/> implementations than these provided in - <paramref name="interceptors"/>. A better way to do this, is by passing all the required - interceptors to the appropriate method of <see cref="T:Castle.DynamicProxy.ProxyGenerator"/>. You can use this - method to influence the order in which interceptors will be called, by reordering the array. - Returning an array containing null references (Nothing in Visual Basic) is not legal, - and will result in a runtime exception. - </remarks> - <seealso cref="T:Castle.DynamicProxy.ProxyGenerationOptions"/> - </member> <member name="M:Castle.DynamicProxy.InternalsHelper.IsInternalToDynamicProxy(System.Reflection.Assembly)"> <summary> Determines whether this assembly has internals visible to dynamic proxy. @@ -532,6 +558,18 @@ <param name="weakAssemblyName">The simple name of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> <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> </member> + <member name="M:Castle.DynamicProxy.ModuleScope.#ctor(System.Boolean,Castle.DynamicProxy.Generators.INamingScope,System.String,System.String,System.String,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:Castle.DynamicProxy.ModuleScope"/> class, allowing to specify whether the assemblies generated by this instance + should be saved and what simple names are to be assigned to them. + </summary> + <param name="savePhysicalAssembly">If set to <c>true</c> saves the generated module.</param> + <param name="namingScope">Naming scope used to provide unique names to generated types and their members (usually via sub-scopes).</param> + <param name="strongAssemblyName">The simple name of the strong-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> + <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> + <param name="weakAssemblyName">The simple name of the weak-named assembly generated by this <see cref="T:Castle.DynamicProxy.ModuleScope"/>.</param> + <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> + </member> <member name="M:Castle.DynamicProxy.ModuleScope.GetFromCache(Castle.DynamicProxy.Generators.CacheKey)"> <summary> Returns a type from this scope's type cache, or null if the key cannot be found. @@ -619,7 +657,7 @@ to avoid the performance hit associated with proxy generation. </remarks> </member> - <member name="P:Castle.DynamicProxy.ModuleScope.RWLock"> + <member name="P:Castle.DynamicProxy.ModuleScope.Lock"> <summary> Users of this <see cref="T:Castle.DynamicProxy.ModuleScope"/> should use this lock when accessing the cache. </summary> @@ -726,11 +764,13 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> + 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 + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.Core.Interceptor.IInterceptor[])"/> method. This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> </member> - <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"> + <member name="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTarget``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"> <summary> Creates proxy object intercepting calls to members of interface <typeparamref name="TInterface"/> on <paramref name="target"/> object with given <paramref name="interceptors"/>. </summary> @@ -747,6 +787,8 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> + 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 + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface``1(``0,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"/> method. This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> @@ -770,6 +812,8 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> + 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 + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.Core.Interceptor.IInterceptor[])"/> method. This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> @@ -794,6 +838,8 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramref name="target"/> throws an exception.</exception> <remarks> + 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 + use <see cref="M:Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithTargetInterface(System.Type,System.Object,Castle.DynamicProxy.ProxyGenerationOptions,Castle.Core.Interceptor.IInterceptor[])"/> method. This method uses <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation to generate a proxy type. As such caller should expect any type of exception that given <see cref="T:Castle.DynamicProxy.IProxyBuilder"/> implementation may throw. </remarks> @@ -818,6 +864,8 @@ <exception cref="T:System.MissingMethodException">Thrown when no default constructor exists on actual type of <paramref name="target"/> object.</exception> <exception cref="T:System.Reflection.TargetInvocationException">Thrown when default constructor of actual type of <paramr... [truncated message content] |