From 4f0dd9a6e82ed3fc5db1bc67360b6df4328031b0 Mon Sep 17 00:00:00 2001 From: tmont Date: Thu, 10 Feb 2011 04:39:59 +0000 Subject: [PATCH] got web app working --- ...icrosoft.Practices.Unity.Configuration.dll | Bin 0 -> 86840 bytes ...icrosoft.Practices.Unity.Configuration.xml | 2451 +++++++ ...tices.Unity.Interception.Configuration.dll | Bin 0 -> 47928 bytes ...tices.Unity.Interception.Configuration.xml | 716 ++ ...Microsoft.Practices.Unity.Interception.dll | Bin 0 -> 125752 bytes ...Microsoft.Practices.Unity.Interception.xml | 3460 ++++++++++ Lib/Microsoft.Practices.Unity.dll | Bin 0 -> 133944 bytes Lib/Microsoft.Practices.Unity.xml | 5910 +++++++++++++++++ Lib/Portoa.Log4Net.dll | Bin 5120 -> 5120 bytes Lib/Portoa.Log4Net.xml | 8 + Lib/Portoa.NHibernate.dll | Bin 14336 -> 16896 bytes Lib/Portoa.NHibernate.xml | 45 + Lib/Portoa.Web.dll | Bin 33792 -> 38912 bytes Lib/Portoa.Web.xml | 315 + Lib/Portoa.dll | Bin 36352 -> 36352 bytes Lib/Portoa.xml | 363 + .../ICurrentUserProvider.cs | 8 + .../Persistence/IUserRepository.cs | 18 + .../Persistence/UserService.cs | 27 + .../VideoGameQuotes.Api.csproj | 3 + .../Controllers/HomeController.cs | 3 - Src/VideoGameQuotes.Web/Default.aspx | 3 + Src/VideoGameQuotes.Web/Default.aspx.cs | 21 + Src/VideoGameQuotes.Web/Global.asax.cs | 48 +- .../Security/UserProvider.cs | 46 + .../VideoGameQuotes.Web.csproj | 29 + .../VideoGameQuotes.Web.csproj.user | 31 + Src/VideoGameQuotes.Web/Views/Home/Index.aspx | 9 +- Src/VideoGameQuotes.Web/Web.config | 125 +- Src/VideoGameQuotes.Web/hibernate.cfg.xml | 13 + .../NHibernate/schema.sql | 2 +- .../VideoGameQuotes.Api.Tests.csproj.user | 6 + 32 files changed, 13563 insertions(+), 97 deletions(-) create mode 100644 Lib/Microsoft.Practices.Unity.Configuration.dll create mode 100644 Lib/Microsoft.Practices.Unity.Configuration.xml create mode 100644 Lib/Microsoft.Practices.Unity.Interception.Configuration.dll create mode 100644 Lib/Microsoft.Practices.Unity.Interception.Configuration.xml create mode 100644 Lib/Microsoft.Practices.Unity.Interception.dll create mode 100644 Lib/Microsoft.Practices.Unity.Interception.xml create mode 100644 Lib/Microsoft.Practices.Unity.dll create mode 100644 Lib/Microsoft.Practices.Unity.xml create mode 100644 Lib/Portoa.Log4Net.xml create mode 100644 Lib/Portoa.NHibernate.xml create mode 100644 Lib/Portoa.Web.xml create mode 100644 Lib/Portoa.xml create mode 100644 Src/VideoGameQuotes.Api/ICurrentUserProvider.cs create mode 100644 Src/VideoGameQuotes.Api/Persistence/IUserRepository.cs create mode 100644 Src/VideoGameQuotes.Api/Persistence/UserService.cs create mode 100644 Src/VideoGameQuotes.Web/Default.aspx create mode 100644 Src/VideoGameQuotes.Web/Default.aspx.cs create mode 100644 Src/VideoGameQuotes.Web/Security/UserProvider.cs create mode 100644 Src/VideoGameQuotes.Web/VideoGameQuotes.Web.csproj.user create mode 100644 Src/VideoGameQuotes.Web/hibernate.cfg.xml create mode 100644 Tests/VideoGameQuotes.Api.Tests/VideoGameQuotes.Api.Tests.csproj.user diff --git a/Lib/Microsoft.Practices.Unity.Configuration.dll b/Lib/Microsoft.Practices.Unity.Configuration.dll new file mode 100644 index 0000000000000000000000000000000000000000..619a5721fbf38fb75e5c4c8e48cd3684733c5569 GIT binary patch literal 86840 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 OZ + + + Microsoft.Practices.Unity.Configuration + + + + + A configuration element storing information about a single type alias. + + + + + Base class for configuration elements with a default implementation of + public deserialization. + + + + + Load this element from the given . + + Contains the XML to initialize from. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Construct a new, uninitialized . + + + + + Construct a new that is initialized + to alias to the target . + + Alias to use. + Type that is aliased. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + The alias used for this type. + + + + + The fully qualified name this alias refers to. + + + + + A collection of s. + + + + + Specialization of + that provides a canned implmentation of . + + Type of configuration element in the collection. + + + + A base helper class for implementing configuration collections. + + Type of configuration element contained in + the collection. + + + + Plug point to get objects out of the collection. + + Index in the collection to retrieve the item from. + Item at that index or null if not present. + + + + Plug point to get objects out of the collection. + + Key to look up the object by. + Item with that key or null if not present. + + + + Load this element from the given . + + Contains the XML to initialize from. + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + Add a new element to the collection. + + Element to add. + + + + Remove an element from the collection at the given index. + + The index of the item to remove. + + + + Remove all the items in the collection. + + + + + Write out the contents of this collection to the given + without a containing element + corresponding directly to this container element. Each + child element will have a tag name given by + . + + to output XML to. + Name of tag to generate. + + + + Indexer to retrieve items in the collection by index. + + Index of the item to get or set. + The item at the given index. + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Indexer that allows you to get or set an alias by the alias name. + + Alias of element to get or set. + The type name at that alias. + + + + A configuration element used to configure injection of + a specific set of values into an array. + + + + + Base class for configuration elements that describe a value that will + be injected. + + + + + Initialize a new instance of . + + + + + Generate an object + that will be used to configure the container for a type registration. + + Container that is being configured. Supplied in order + to let custom implementations retrieve services; do not configure the container + directly in this method. + Type of the + + + + + Validate that an expected attribute is present in the given + dictionary and that it has a non-empty value. + + Dictionary of name/value pairs to check. + attribute name to check. + + + + Return a unique string that can be used to identify this object. Used + by the configuration collection support. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Generate an object + that will be used to configure the container for a type registration. + + Container that is being configured. Supplied in order + to let custom implementations retrieve services; do not configure the container + directly in this method. + Type of the + + + + + Type of array to inject. This is actually the type of the array elements, + not the array type. Optional, if not specified we take the type from + our containing element. + + + + + Values used to calculate the contents of the array. + + + + + A configuration element representing the namespace + tags in the config file. + + + + + An element with a single "name" property, used for + the namespaces and assemblies. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Name attribute for this element. + + + + + A collection of s in configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Helpful extension methods when implementing configuration sections + that deserialize "unwrapped" elements - elements that should be + deserialized into a container but can be present outside + that container in the actual config file. + + + + + Deserialize an element of the given type, store it in + the collection object, and + + Type of element to create and deserialize. + Parent element containing element to deserialize. + Xml reader containing state to deserialize from. + Collection to store the created element into. + The created element. + + + + Deserialize an element, basing the element type on the one + supplied at runtime, and then store the element into the + given . + + This method is useful when reading elements into a polymorphic collection. + Base type of element to store. + Element that contains the collection being stored into. + Xml Reader containing state to deserialize from. + Runtime type of element to create. + Collection to store the created element into. + The created element. + + + + Class that tracks the current input state of the parser. + + + + + A simple implementing of the rules for a Parsing Expression Grammar + parsing algorithm. This supplies basic methods to do the primitives + of the PEG, and combinators to create larger rules. + + + + + The PEG "dot" operator that matches and consumes one character. + + Input to the parser. + The parse result. + + + + Parse function generator that returns a method to match a single, + specific character. + + Character to match. + The generated parsing function. + + + + Parse function generator that checks if the current character matches + the predicate supplied. + + Predicate used to determine if the character is in + the given range. + The generated parsing function. + + + + The "*" operator - match zero or more of the inner parse expressions. + + Parse method to repeat matching. + The generated parsing function. + + + + Parsing combinator that matches all of the given expressions in + order, or matches none of them. + + Expressions that form the sequence to match. + The combined sequence. + + + + Parsing combinator that implements the PEG prioritized choice operator. Basically, + try each of the expressions in order, and match if any of them match, stopping on the + first match. + + Expressions that form the set of alternatives. + The combined parsing method. + + + + Parsing combinator implementing the "not" predicate. This wraps + the given parsing method with a check + to see if it matched. If it matched, then the Not fails, and vice + versa. The result consumes no input. + + The parse method to wrap. + The generated parsing function. + + + + Parsing expression that matches End of input. + + Parser input. + Parse result + + + + Combinator that executes an action if the given expression matched. + + Parsing expression to match. + Action to execute if + matched. Input is the matched text from . + The result of . + + + + Combinator that executes an action if the given expression matched. + + parsing expression to match. + Method to execute if a match happens. This method returns + the that will be returned from the combined expression. + The result of if expression matched, else + whatever returned. + + + + Object containing the result of attempting to match a PEG rule. + This object is the return type for all parsing methods. + + + + + Did the rule match? + + + + + The characters that were matched (if any) + + + + + Any extra information provided by the parsing expression + (only set if the parse matched). The nature + of the data varies depending on the parsing expression. + + + + + Helper methods to make it easier to pull the data + out of the result of a sequence expression. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + 2 + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + Adds an item to the . + + The object to add to the . + The is read-only. + + + + + Removes all items from the . + + The is read-only. + + + + + Determines whether the contains a specific value. + + + true if is found in the ; otherwise, false. + + The object to locate in the . + + + + + Copies the elements of the sequence to an , starting at a particular index. + + The one-dimensional that is the destination of the elements copied from this sequence. The must have zero-based indexing. + The zero-based index in at which copying begins. + is null. + is less than 0. + is multidimensional. + -or- + is equal to or greater than the length of . + -or- + The number of elements in the source is greater than the available space from to the end of the destination . + + + + + Removes the first occurrence of a specific object from the . + + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + The object to remove from the . + The is read-only. + + + + + Determines the index of a specific item in the . + + + The index of if found in the list; otherwise, -1. + + The object to locate in the . + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + is not a valid index in the . + The is read-only. + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + is not a valid index in the . + The is read-only. + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + + Gets a value indicating whether the is read-only. + + + true if the is read-only; otherwise, false. + + + + + Gets or sets the element at the specified index. + + + The element at the specified index. + + The zero-based index of the element to get or set. + is not a valid index in the . + The property is set and the is read-only. + + + + + Class containing information about a type name. + + + + + The base name of the class + + + + + Namespace if any + + + + + Assembly name, if any + + + + + Helper methods on . + + + + + A helper method to make it more foolproof to write elements. This takes care of writing the + start and end elment tags, and takes a nested closure with the code to write the content of + the tag. That way the caller doesn't need to worry about the details of getting the start + and end tags correct. + + + We don't support XML Namespaces here because .NET configuration doesn't use them so + we don't need it for this current implementation. + + XmlWriter to write to. + Name of element. + Nested lambda which, when executed, will create the content for the + element. + (for method chaining if desired). + + + + A helper method to make it easier to output attributes. If the is + null or an empty string, output nothing, else output the given XML attribute. + + Writer to output to. + Attribute name to write. + Value for the attribute. + (for method chaining if desired). + + + + A base class for those elements that can be used + to configure a unity container. + + + + + Create a new instance of . + + + + + Apply this element's configuration to the given . + + Container to configure. + + + + Return a unique key that can be used to manage this element in a collection. + + + + + A couple of useful extension methods on IDictionary + + + + + Get the value from a dictionary, or null if there is no value. + + Key type of dictionary. + Value type of dictionary. + Dictionary to search. + Key to look up. + The value at the key or null if not in the dictionary. + + + + A helper class used to map element tag names to a handler method + used to interpret that element. + + + + + + Add method to enable dictionary initializer syntax + + + + + + + Process an unknown element according to the map entries. + + Parent element that hit this unknown element. + Name of the unknown element. + XmlReader positioned at start of element. + true if processed, false if not. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + 2 + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + A helper class used to map element tag names to a handler method + used to interpret that element. + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + 2 + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + A helper class that assists in deserializing parameter and property + elements. These elements both have a single "value" child element that + specify the value to inject for the property or parameter. + + + + + Create a new that wraps reading + values and storing them in the given . + + Element that contains the value elements. + + + + Gets a , or if none is present, + returns a default . + + The . + The given , unless + is null, in which case returns + a . + + + + Helper method used during deserialization to handle + attributes for the dependency and value tags. + + attribute name. + attribute value. + true + + + + Helper method used during deserialization to handle the default + value element tags. + + The element name. + XML data to read. + True if deserialization succeeded, false if it failed. + + + + Call this method at the end of deserialization of your element to + set your value element. + + + + + Serialize a object out to XML. + This method is aware of and implements the shorthand attributes + for dependency and value elements. + + Writer to output XML to. + The to serialize. + If true, always output an element. If false, then + dependency and value elements will be serialized as attributes in the parent tag. + + + + Configuration element representing a constructor configuration. + + + + + Base class for configuration elements that generate + object to configure a container. + + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Get the standard tag name for an + taking into account currently loaded section extensions. + + Element to get the name for. + The element name. + If the member element is not currently registered + with the section. + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + Element name to use to serialize this into XML. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + The parameters of the constructor to call. + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + Element name to use to serialize this into XML. + + + + + A collection of s as + loaded from configuration. + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + A configuration element class defining the set of registrations to be + put into a container. + + + + + Original configuration API kept for backwards compatibility. + + Container to configure + + + + Apply the configuration information in this element to the + given . + + Container to configure. + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Name for this container configuration as given in the config file. + + + + + The type registrations in this container. + + + + + Any instances to register in the container. + + + + + Any extensions to add to the container. + + + + + Set of any extra configuration elements that were added by a + section extension. + + + This is not marked as a configuration property because we don't want + the actual property to show up as a nested element in the configuration. + + + + Configuration element representing an extension to add to a container. + + + + + Add the extension specified in this element to the container. + + Container to configure. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Type of the extension to add. + + + + + A collection of s. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + A derived class that describes + a parameter that should be resolved through the container. + + + + + Create a new instance of . + + + + + Create a new instance of with + properties initialized from the contents of + . + + Dictionary of name/value pairs to + initialize this object with. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Write the contents of this element to the given . This + method always outputs an explicit <dependency> tag, instead of providing + attributes to the parent method. + + Writer to send XML content to. + + + + Generate an object + that will be used to configure the container for a type registration. + + Container that is being configured. Supplied in order + to let custom implementations retrieve services; do not configure the container + directly in this method. + Type of the + + + + + Name to use to when resolving. If empty, resolves the default. + + + + + Name of type this dependency should resolve to. This is optional; + without it the container will resolve the type of whatever + property or parameter this element is contained in. + + + + + Base class used to derive new elements that can occur + directly within a container element. + + + + + Initialize a new instance of . + + + + + When overridden in a derived class, this method will make configuration + calls into the given according to its contents. + + The container to configure. + + + + Unique key generated for use in the collection class. + + + + + A collection of s. + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + This class manages the set of extension elements + added by section elements. + + + + + Clear the current set of extension elements. + + + + + Register a new ContainerExtensionConfigurationElement with he section so it + can be read. + + prefix if any. + tag name. + Type of element to register. + + + + Register a new with the section + so it can be read. + + prefix if any. + Tag name. + Type of element to register. + + + + Register a new with the section + so it can be read. + + prefix if any. + Tag name. + Type of element to register. + + + + Retrieve the registered for the given + tag. + + Tag to look up. + Type of element, or null if not registered. + + + + Retrieve the ContainerExtensionConfigurationElement registered for the given + tag. + + Tag to look up. + Type of element, or null if not registered. + + + + Retrieve the ContainerExtensionConfigurationElement registered for the given + tag. + + Tag to look up. + Type of element, or null if not registered. + + + + Retrieve the correct tag to use when serializing the given + to XML. + + Element to be serialized. + The tag for that element type. + if the element is of a type that + is not registered with the section already. + + + + A polymorphic collection of s. + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Indexer that lets you access elements by their key. + + Key to retrieve element with. + The element. + + + + A configuration element that describes an instance to add to the container. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Add the instance defined by this element to the given container. + + Container to configure. + + + + Name to register instance under + + + + + Value for this instance + + + + + Type of the instance. If not given, defaults to string + + + + + Type name for the type converter to use to create the instance. If not + given, defaults to the default type converter for this instance type. + + + + + Key used to keep these instances unique in the config collection. + + + + + A collection of s. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + An element that has a child Value property. + + + + + String that will be deserialized to provide the value. + + + + + A string describing where the value this element contains + is being used. For example, if setting a property Prop1, + this should return "property Prop1" (in english). + + + + + A configuration element that represents lifetime managers. + + + + + Create the described by + this element. + + A instance. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Type of the lifetime manager. + + + + + Extra initialization information used by the type converter for this lifetime manager. + + + + + Type of to use to create the + lifetime manager. + + + + + A configuration element representing a method to call. + + + + + Construct a new instance of . + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Name of the method to call. + + + + + Parameters to the method call. + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + Element name to use to serialize this into XML. + + + + + A configuration element representing the namespace + tags in the config file. + + + + + A collection of s in configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + A configuration element that specifies that a value + is optional. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Generate an object + that will be used to configure the container for a type registration. + + Container that is being configured. Supplied in order + to let custom implementations retrieve services; do not configure the container + directly in this method. + Type of the + + + + + Name used to resolve the dependency, leave out or blank to resolve default. + + + + + Type of dependency to resolve. If left out, resolved the type of + the containing parameter or property. + + + + + Configuration element representing a parameter passed to a constructor + or a method. + + + + + Construct a new instance of . + + + + + Returns the required needed + to configure the container so that the correct value is injected. + + Container being configured. + Type of the parameter. + The value to use to configure the container. + + + + Does the information in this match + up with the given ? + + Information about the parameter. + True if this is a match, false if not. + + + + Reads XML from the configuration file. + + The that reads from the configuration file. + true to serialize only the collection key properties; otherwise, false. + The element to read is locked. + - or - + An attribute of the current node is not recognized. + - or - + The lock status of the current node cannot be determined. + + + + + Gets a value indicating whether an unknown attribute is encountered during deserialization. + + + true when an unknown attribute is encountered while deserializing; otherwise, false. + + The name of the unrecognized attribute. + The value of the unrecognized attribute. + + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Name of this parameter. + + + + + Type of this parameter. + + This is only needed in order to disambiguate method overloads. Normally + the parameter name is sufficient. + + + + Element that describes the value for this property. + + + This is NOT marked as a ConfigurationProperty because this + child element is polymorphic, and the element tag determines + the type. Standard configuration properties only let you do + this if it's a collection, but we only want one value. Thus + the separate property. The element is deserialized in + . + + + + A string describing where the value this element contains + is being used. For example, if setting a property Prop1, + this should return "property Prop1" (in english). + + + + + A collection of objects. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + A collection of objects. + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + String that will be deserialized to provide the value. + + + + + A string describing where the value this element contains + is being used. For example, if setting a property Prop1, + this should return "property Prop1" (in english). + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to An abstract ContainerConfiguringElement cannot be created. Please specify a concrete type.. + + + + + Looks up a localized string similar to An abstract ExtensionConfigurationElement object cannot be created. Please specify a concrete type.. + + + + + Looks up a localized string similar to An abstract InjectionMemberElement object cannot be created. Please specify a concrete type.. + + + + + Looks up a localized string similar to An abstract ParameterValueElement object cannot be created. Please specify a concrete type.. + + + + + Looks up a localized string similar to The type name or alias {0} could not be resolved. Please check your configuration file and verify this type name.. + + + + + Looks up a localized string similar to The dependency element for generic parameter {0} must not have an explicit type name but has '{1}'.. + + + + + Looks up a localized string similar to The optional dependency element for generic parameter {0} must not have an explicit type name but has '{1}'.. + + + + + Looks up a localized string similar to {0} {1}. + + + + + Looks up a localized string similar to The injection configuration for {0} has multiple values.. + + + + + Looks up a localized string similar to The configuration element type {0} has not been registered with the section.. + + + + + Looks up a localized string similar to The injection configuration for {0} is specified through both attributes and child value elements.. + + + + + Looks up a localized string similar to Could not load section extension type {0}.. + + + + + Looks up a localized string similar to The extension type {0} does not derive from SectionExtension.. + + + + + Looks up a localized string similar to The extension element type {0} that is being added does not derive from ContainerConfiguringElement, InjectionMemberElement, or ParameterValueElement. An extension element must derive from one of these types.. + + + + + Looks up a localized string similar to No valid attributes were found to construct the value for the {0}. Please check the configuration file.. + + + + + Looks up a localized string similar to Configuration is incorrect, the type {0} does not have a constructor that takes parameters named {1}.. + + + + + Looks up a localized string similar to Configuration is incorrect, the type {0} does not have a method named {1} that takes parameters named {2}.. + + + + + Looks up a localized string similar to The container named "{0}" is not defined in this configuration section.. + + + + + Looks up a localized string similar to The type {0} does not have a property named {1}.. + + + + + Looks up a localized string similar to The configuration is set to inject an array, but the type {0} is not an array type.. + + + + + Looks up a localized string similar to parameter. + + + + + Looks up a localized string similar to property. + + + + + Looks up a localized string similar to The attribute {0} must be present and non-empty.. + + + + + Looks up a localized string similar to The value element for {1} was specified for the generic array type {0}. Value elements are not allowed for generic array types.. + + + + + Looks up a localized string similar to The value element for {1} was specified for the generic parameter type {0}. Value elements are not allowed for generic parameter types.. + + + + + Looks up a localized string similar to The value element for {1} was specified for the generic type {0}. Value elements are not allowed for generic types.. + + + + + A class representing a property configuration element. + + + + + Construct a new instance of + + + + + Reads XML from the configuration file. + + The that reads from the configuration file. + true to serialize only the collection key properties; otherwise, false. + The element to read is locked. + - or - + An attribute of the current node is not recognized. + - or - + The lock status of the current node cannot be determined. + + + + + Gets a value indicating whether an unknown attribute is encountered during deserialization. + + + true when an unknown attribute is encountered while deserializing; otherwise, false. + + The name of the unrecognized attribute. + The value of the unrecognized attribute. + + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Name of the property that will be set. + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + String that will be deserialized to provide the value. + + + + + A string describing where the value this element contains + is being used. For example, if setting a property Prop1, + this should return "property Prop1" (in english). + + + + + Element name to use to serialize this into XML. + + + + + A configuration element representing a single container type registration. + + + + + Apply the registrations from this element to the given container. + + Container to configure. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + The type that is registered. + + + + + Name registered under. + + + + + Type that is mapped to. + + + + + Lifetime manager to register for this registration. + + + + + Any injection members (constructor, properties, etc.) that are specified for + this registration. + + + + + A collection of s. + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Base class for Unity configuration section extensions. + Derived classes are used to add custom elments and aliases + into the configuration section being loaded. + + + + + Add the extensions to the section via the context. + + Context object that can be used to add elements and aliases. + + + + An object that gives the ability to add + elements and aliases to a configuration section. + + + + + Add a new alias to the configuration section. This is useful + for those extensions that add commonly used types to configuration + so users don't have to alias them repeatedly. + + The alias to use. + Type the alias maps to. + + + + Add a new alias to the configuration section. This is useful + for those extensions that add commonly used types to configuration + so users don't have to alias them repeatedly. + + Type the alias maps to. + The alias to use + + + + Add a new element to the configuration section schema. + + Tag name in the XML. + Type the tag maps to. + + + + Add a new element to the configuration section schema. + + Type the tag maps to. + Tag name in the XML. + + + + A configuration element used to specify which extensions to + add to the configuration schema. + + + + + Reads XML from the configuration file. + + The that reads from the configuration file. + true to serialize only the collection key properties; otherwise, false. + The element to read is locked. + - or - + An attribute of the current node is not recognized. + - or - + The lock status of the current node cannot be determined. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Type of the section extender object that will provide new elements to the schema. + + + + + Optional prefix that will be added to the element names added by this + section extender. If left out, no prefix will be added. + + + + + The extension object represented by this element. + + + + + A collection of s. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Type that manage access to a set of type aliases and implements + the logic for converting aliases to their actual types. + + + + + Set the set of aliases to use for resolution. + + Configuration section containing the various + type aliases, namespaces and assemblies. + + + + Resolves a type alias or type fullname to a concrete type. + + Type alias or type fullname + Type object or null if resolve fails. + Thrown if alias lookup fails. + + + + Resolves a type alias or type fullname to a concrete type. + + Alias or name to resolve. + if true and the alias does not + resolve, throw an , otherwise + return null on failure. + The type object or null if resolve fails and + is false. + + + + Resolve a type alias or type full name to a concrete type. + If is null or empty, return the + given instead. + + Type alias or full name to resolve. + Value to return if typeName is null or empty. + The concrete . + Thrown if alias lookup fails. + + + + Resolve a type alias or type full name to a concrete type. + If is null or empty, return the + given instead. + + Type alias or full name to resolve. + Value to return if typeName is null or empty. + if true and the alias does not + resolve, throw an , otherwise + return null on failure. + The concrete . + Thrown if alias lookup fails and + is true. + + + + A helper class that implements the actual logic for resolving a shorthand + type name (alias or raw type name) into an actual type object. + + + + + Construct a new that uses the given + sequence of alias, typename pairs to resolve types. + + Type aliases from the configuration file. + Assembly names to search. + Namespaces to search. + + + + Resolves a type alias or type fullname to a concrete type. + + Alias or name to resolve. + if true and the alias does not + resolve, throw an , otherwise + return null on failure. + The type object or null if resolve fails and + is false. + + + + Resolve a type alias or type full name to a concrete type. + If is null or empty, return the + given instead. + + Type alias or full name to resolve. + Value to return if typeName is null or empty. + if true and the alias does not + resolve, throw an , otherwise + return null on failure. + + If is null or an empty string, + then return . + Otherwise, return the resolved type object. If the resolution fails + and is false, then return null. + + + + + A configuration section describing configuration for an . + + + + + The name of the section where unity configuration is expected to be found. + + + + + XML Namespace string used for IntelliSense in this section. + + + + + Apply the configuration in the default container element to the given container. + + Container to configure. + The passed in . + + + + Apply the configuration in the default container element to the given container. + + Container to configure. + Name of the container element to use to configure the container. + The passed in . + + + + Reads XML from the configuration file. + + The object, which reads from the configuration file. + found no elements in the configuration file. + + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Creates an XML string containing an unmerged view of the object as a single section to write to a file. + + + An XML string containing an unmerged view of the object. + + The instance to use as the parent when performing the un-merge. + The name of the section to create. + The instance to use when writing to a string. + + + + + The current that is being deserialized + or being configured from. + + + + + Storage for XML namespace. The namespace isn't used or validated by config, but + it is useful for Visual Studio XML IntelliSense to kick in. + + + + + The set of containers defined in this configuration section. + + + + + The set of type aliases defined in this configuration file. + + + + + Any schema extensions that are added. + + + + + Any namespaces added to the type search list. + + + + + Any assemblies added to the type search list. + + + + + Add a new alias to the configuration section. This is useful + for those extensions that add commonly used types to configuration + so users don't have to alias them repeatedly. + + The alias to use. + Type the alias maps to. + + + + Add a new element to the configuration section schema. + + Tag name in the XML. + Type the tag maps to. + + + + Collection element for s. + + + + + Plug point to get objects out of the collection. + + Index in the collection to retrieve the item from. + Item at that index or null if not present. + + + + Plug point to get objects out of the collection. + + Key to look up the object by. + Item with that key or null if not present. + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Retrieve a stored by name. + + Name to look up. + The stored container or null if not in the collection. + + + + Return the default container in the collection. The default is the one without a name. + + + + + Extensions to to simplify + loading configuration into a container. + + + + + Apply configuration from the given section and named container + into the given container. + + Unity container to configure. + Configuration section with config information. + Named container. + . + + + + Apply configuration from the default section (named "unity" pulled out of + ConfigurationManager) and the named container. + + Unity container to configure. + Named container element in configuration. + . + + + + Apply configuration from the default section and unnamed container element. + + Container to configure. + . + + + + Apply configuration from the default container in the given section. + + Unity container to configure. + Configuration section. + . + + + + Element that describes a constant value that will be + injected into the container. + + + + + Construct a new object. + + + + + Construct a new object, + initializing properties from the contents of + . + + Name/value pairs which + contain the values to initialize properties to. + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Write the contents of this element to the given . This + method always outputs an explicit <dependency> tag, instead of providing + attributes to the parent method. + + Writer to send XML content to. + + + + Generate an object + that will be used to configure the container for a type registration. + + Container that is being configured. Supplied in order + to let custom implementations retrieve services; do not configure the container + directly in this method. + Type of the parameter to get the value for. + The required object. + + + + Value for this element + + + + + + + + + diff --git a/Lib/Microsoft.Practices.Unity.Interception.Configuration.dll b/Lib/Microsoft.Practices.Unity.Interception.Configuration.dll new file mode 100644 index 0000000000000000000000000000000000000000..15ec9b8b4f8b4a91fe42217c09ad5b3f27c1c537 GIT binary patch literal 47928 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 PA!%X3Z9n}dZIt{U$PtCv literal 0 HcmV?d00001 diff --git a/Lib/Microsoft.Practices.Unity.Interception.Configuration.xml b/Lib/Microsoft.Practices.Unity.Interception.Configuration.xml new file mode 100644 index 0000000..eda678d --- /dev/null +++ b/Lib/Microsoft.Practices.Unity.Interception.Configuration.xml @@ -0,0 +1,716 @@ + + + + Microsoft.Practices.Unity.Interception.Configuration + + + + + Configuration element that lets you specify additional interfaces + to add when this type is intercepted. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Type of interface to add. + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + Configuration element representing a call handler. + + + + + Base class for the two children of the Policy element: + MatchingRuleElement and CallHandlerElement. + + + + These configuration elements have a required "name" attribute, an optional "type" attribute, and + optional child elements <lifetime> and <injection> + + + Elements without a value for the type attribute can only have a value for the name attribute, and + indicate that the represented handler or rule is configured elsewhere and that a reference to + the given name must be added to the policy to be resolved, while elements with a value for the type + attribute indicate how the represented handler or rule should be built and can optionally specify + lifetime management and injection configuration. + + + This element is similar to the , except that it does not provide + an extension point for arbitrary configuration. + + + + + + Reads XML from the configuration file. + + The that reads from the configuration file. + true to serialize only the collection key properties; otherwise, false. + The element to read is locked. + - or - + An attribute of the current node is not recognized. + - or - + The lock status of the current node cannot be determined. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Name of this item + + + + + Type that implements this matching rule or call handler. + + + + + Injection members that control how this item is created. + + + + + Lifetime manager for this item. + + + + + A collection of s for configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + Retrieve a call handler element from the collection by name. + + Name to look up. + The rule, or null if not in the collection. + + + + The <default> element that appears inside an <interceptor> element. + + + + + Base class for the default and key elements that can occur + inside the <interceptor> element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Actually register the interceptor against this type. + + Container to configure. + interceptor to register. + + + + Type name that this interceptor will be registered for. + + + + + Return the type object that is resolved from the property. + + The type object. + + + + Actually register the interceptor against this type. + + Container to configure. + interceptor to register. + + + + Configuration elmement for specifying + interception behaviors for a type. + + + + + Reads XML from the configuration file. + + The that reads from the configuration file. + true to serialize only the collection key properties; otherwise, false. + The element to read is locked. + - or - + An attribute of the current node is not recognized. + - or - + The lock status of the current node cannot be determined. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Type of behavior to add. + + + + + Name of behavior to resolve. + + + + + Should this behavior be configured as a default behavior for this type, or + specifically for this type/name pair only? + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + Section extension class used to add the elements needed to configure + Unity interception to the configuration schema. + + + + + Add the extensions to the section via the context. + + Context object that can be used to add elements and aliases. + + + + A configuration element that contains the top-level container configuration + information for interception - handler policies and global interceptor definitions. + + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Apply this element's configuration to the given . + + Container to configure. + + + + Policies defined for this container. + + + + + Configuration element that lets you configure + what interceptor to use for a type. + + + + + Initialize a new . + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Type name for the interceptor to apply. + + + + + Name to use when resolving interceptors from the container. + + + + + Should this interceptor be registered as the default for the contained + type, or only for this particular type/name pair? + + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + A collection of objects as shown + in configuration. + + + + + When overridden in a derived class, creates a new . + + + A new . + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Configuration element that provides a top-level element for + configuration interceptors for types in a container. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Apply this element's configuration to the given . + + Container to configure. + + + + The various child elements that are contained in this element. + + + + + Configuration element that represents the configuration for + a specific interceptor, as presented in the config file inside + the <interceptors> element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Type of interceptor to configure. + + + + + The types that this interceptor will be registered against. + + + + + Any value passed to the type converter. + + + + + Type converter to use to create the interceptor, if any. + + + + + A collection of objects + as stored in configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + The <key> element that occurs inside an <interceptor> element + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Actually register the interceptor against this type. + + Container to configure. + interceptor to register. + + + + Name registration should be under. To register under the default, leave blank. + + + + + A configuration element representing a matching rule. + + + + + A collection of s for configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Causes the configuration system to throw an exception. + + + true if the unrecognized element was deserialized successfully; otherwise, false. The default is false. + + The name of the unrecognized element. + An input stream that reads XML from the configuration file. + The element specified in is the <clear> element. + starts with the reserved prefix "config" or "lock". + + + + + Retrieve a matching rule element from the collection by name. + + Name to look up. + The rule, or null if not in the collection. + + + + Configuration element for building up an interception policy. + + + + + Gets a value indicating whether an unknown element is encountered during deserialization. + + + true when an unknown element is encountered while deserializing; otherwise, false. + + The name of the unknown subelement. + The being used for deserialization. + The element identified by is locked. + - or - + One or more of the element's attributes is locked. + - or - + is unrecognized, or the element has an unrecognized attribute. + - or - + The element has a Boolean attribute with an invalid value. + - or - + An attempt was made to deserialize a property more than once. + - or - + An attempt was made to deserialize a property that is not a valid member of the element. + - or - + The element cannot contain a CDATA or text element. + + + + + Write the contents of this element to the given . + + The caller of this method has already written the start element tag before + calling this method, so deriving classes only need to write the element content, not + the start or end tags. + Writer to send XML content to. + + + + Name of this policy. + + + + + Matching rules for this policy. + + + + + Call handlers for this policy. + + + + + A collection of in the configuration. + + + + + Gets the element key for a specified configuration element when overridden in a derived class. + + + An that acts as the key for the specified . + + The to return the key for. + + + + + Indexer to retrieve policy element objects by name. + + Name of policy to get. + The element. + + + + A shortcut element to enable the policy injection behavior. + + + + + Return the set of s that are needed + to configure the container according to this configuration element. + + Container that is being configured. + Type that is being registered. + Type that is being mapped to. + Name this registration is under. + One or more objects that should be + applied to the container registration. + + + + Each element must have a unique key, which is generated by the subclasses. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The abstract type InterceptorRegistrationElement cannot be created. Please create a concrete instance.. + + + + + Looks up a localized string similar to The <injection/> element is not allowed on element named '{0}' because it doesn't have a type attribute.. + + + + + Looks up a localized string similar to The <lifetime/> element is not allowed on element named '{0}' because it doesn't have a type attribute.. + + + + + Looks up a localized string similar to The type name or alias {0} could not be resolved. Please check your configuration file and verify this type name.. + + + + + Looks up a localized string similar to Cannot create instance of type {0} with a default constructor.. + + + + + Looks up a localized string similar to The type name {0} resolved to type {1} is not compatible with the required type {2}.. + + + + + Looks up a localized string similar to The type {0} could not be resolved to a valid type. Please double check your configuration.. + + + + + Looks up a localized string similar to The interception behavior element must have at least one of the 'name' or 'type' attributes.. + + + + diff --git a/Lib/Microsoft.Practices.Unity.Interception.dll b/Lib/Microsoft.Practices.Unity.Interception.dll new file mode 100644 index 0000000000000000000000000000000000000000..28b3c0e82e29288fd4e7882cc45542950b6a35f7 GIT binary patch literal 125752 zcmeEvcVJw_)$i=RyLVTsdL?-!S4pmy-Id&%z`bA_V~ULn5O5P9FurD2cEHOD8wk}l zy~G3p1`+}U2)(z^Nk9pmI0iyO5+IO9C?WRy{m$IGyOL$#d*Ao|c<&*5=gv8E=FFKh zGiU0ZyZ@o*D^n>I#BbLwrS8R(f0M=iYG(t2%j)hgQ+F2qvfZ z+sbGt4n&l?I-pd&#?E`#^FN9wr6ayV%MG8%&!m>dZ#D3( z2ENt6w;K3X1K(=kTMc}xfp0bNtp>i;z_%Ls|40MFIIqSZ=ca}Vsn;J;stxM^MS@l8 zhP#y-7FO!OdZjjaxUYJ=Q8E7P>rOiNzQm??0zHqt?w2nowypnd&%1|~EUtLu-q)Vn zaKN-At-WZ8xCB{Ou=2_)F9M!YvDE~oSt|%j|7xevl)vZ zfv6QT-Cn?LvmDI*qY@*HX@7LRVP+9M2)?EQ3$8NQWx-&`sRQe%Wn>uY_5%=~X>>qg zy`8>f4mvA-lrOo2J zGG1?F$R=5A1Vd#(2Zd(EwKqyHAxnQP2Ni|J>!*sB+Vo~m( zmYXQ(NaC9cT0zZIwi%33Ux}!dj964NN}bjao@y^4%e!q`eijUaT6%v0y^p-x%x z=Zp-~NS5p8S|nst?=<5b^hmK98S-<7KsMKbLmirG7<7OlwY}(7`q{=<>3Il>CQ5X~ zbOWKFWjaVFA@z}Qq0O#w>lyd*PH_kOaUnvYiy9?wozz$jY7jXnpQw>WZHi_gVldv% z$jEbyewuDVvLX2x4q347g|d{Y6E&+o!RKUK8yY z%&qGQ#LwA1xV;HU7m&nIrU5W^Z)PLt4O?>n+6S21M(U27*r}I%Z!q4ut^Q?2tA~OhTKbkb}&k!L*~j2OI6`oz^ID zNuv~^8;BA-?LxuKX!M#GE;4Kw170pRWrs?xAK7XB(LVOLttIC_IccF>)JFd)V=(tA6~ zDy^L{@aye11F^j*t^!ySHB>{O-=qLqwNevdLqhrDh#yr@SS&`g1+N&_6^2NRU_of- z5=4q9!;vUMXbEMA()4Dn6^Z$oo8szMQW9{^R6 zM5P^ZC(vuzA={FI0%jsGjepotVn>o;fKp6$$S*=DOc)R*jLl9YVVUky2r2OgkA;`ywtXh@IZgkbXByT1#RyRyYrWmlTs% zmo=xGe5|$8nu}=ZNnq`aMD{gLuIr=dZ7t7zpw0~k3~wYLavushWX?9)Q5ChKQIW0m zWU$*nl;9nZB+%`!X}6dAgs9*;-3>$uUL+{C!tB5j4&ok4O*heJAV#uN^v7~KC=UBWB3*}fkFLi6(1Ai0 z?DYOpE@qbUS-~vDHX37=mLHoamT*YVM4Iaj6v#Xl2ud~TKrxB@P$_3HVYOic3WiGG zu-CR3Nrp{ovr5W> z5sRZ32>|N^dwR;no}SNcdwR-H(9>V)ML|!^DEZz!Ze&O*eS5qsRXy6J^y5C&VCJV& zPmLzao;pA7G})wOsInJSi_sR!*fN3+6m1zHXEp=TFIFN^=@-QVM3s*a4-ha4nnFDJ zP8tIy83@P|WzYJ037*K8ZPHjo*CK|I48+YE2i(y|H3s6A=^{5)F>pvAQ4#^pj5(l8 zlomCH#b6|?A{T>im?o25VpQ~371B(_DpXk!Gb~1_19T2VNL0bvZfT7TuQhFt5(qme zUA8+HT;d|5sZe6;iObn7?L1Woq9Te8ss3qv6Va3hHXr;Nc z2geIVap?jyuM(dZCGVD3#OKAvejp_q!!E5XSnVuesob6$2SJda5zJzM88kv!j4p#l zSul&{jb|u}X-W{8>J7a&!FWN%HpWRLb`JvAq!En!@WFrw8yVrJDdq!XI17=Ui$u{C zCwibSJ_KG2*n)#<7FQU~B7_1d2LE?3_(2%_pf>o1vzSp4KUx(+)Q}5eOdP^q)Fq4> z%0~?$YRHdzIHMvy#{xajv4A*QVnn>C-(gfMAJsxs%ZsXIhZT-ig=6TUMxux#TT6A$ zij0h?C?g8WP(5iX6jKi5%c?N!NX_D^h#g@?8Sx}_7jQVX*jx4gj@~vk)H>Dwa^L?m z)&C{!uNr13v@nG#Ydc3EdG|;-M&=%*F|vn|xf{>Aog<5lSe9NRny8AU7wY~gb1yJi zI&5&x0l;FsXsQRn57i!)fKiIWGfW_0U(}`e9f#kz3*Z<%G{+kKFoc_^p>B-36hdV0 zXM(Zp19&9n8b(Io48g70`xus?>n;OrV?Trw%HG9*TH#p}-7&_ zb{#4NWRFF6gbil_eA}%!$7ZmV>W(`&{ZI<#f}G>M(#w(Dde{U*)dAllm(QqGvt$OQ zcW+Fr1OZn&W@9DMj~&}ChBWp z-k?n65Za8oX*iy^ZSZPw*TVN-5qFN6T9O-j%OXv@-OSIZf~oKLpC3~`^1u#-#+Qp?ej=fJFZha4NR5}{EyQAi1t5D|6}yC-7aP&r5@&?=IZ)P zR#7Y0ZqI}OMF<>6Ym90tDP_n^@-hArgc}($)bRHNX1IriF^VQrXrdD5L_pb}Gc=Zc z0*}Nrgb17=h#Fo1q|bvUvM?z@G-W1S6Za(;B;;t*jAaO*qoPg!blj;FLZ|PgdlJ)q zlC-hxQ+OoyH;j`BXVxRc$Pl;H!({T90tsq&lYns`0Uw${0Y`{&RgBG_()*S}?13Qi z_CWMmU=LWhQa81YVcEkDc%`Zf)XY8#A`C)VmZ&McQGT}|$7q*!K}9Q^%@xN=O!s8u zD_LZ^Sv-qtN-E88$hiR;Ztnv=gQ`MKI|2kKs#NYN02=#-LuoW|nNPWB(v}x)xf>9? zBZ8UxMtHVIlBE~}LG4lZG&oVqJspqORy_g2RLhD5x7k*W3CBeh(X%q-Q_q8^s3un* zE1H_V38|#d0Lcc5#Y)PdUVOEKnix%;#;N96@YT3ylctU|XK0$B13P44T-_H)j4=A~ z;lRjC@u1%6m^XfmH|TZ+FiSL?TChxR#=Y^a(e2aF8nd4@_Kv( z1@P>ao!(5Ljm!Y%HzS$P)WaV$G7WghZ~@Czhd>cn1f^Ca%NQLEz{rO=#u^+WM+}Kq zlg2p8LSG;;{ISx@UB^l=TtA(dUb85Smh>}w&n z71eNkG9asm+lsi(sJjR+D}CzfE%$tIE)LhkWX;LN*daPNTpLSa9=OJX+zXk3Nc%;2 zxEI5Tv|j?(LF2aEO9d_nx{N_+v3}6yfOW3j?{}r$3WUc|lTn+ylU>o3tbd;D2YwiJ z!+Ab>7KIY9YoZSNJgycR4!SVQa<2qwR*KL;?`6S!5paGAf3_Yz4N;*J!j-ZHvek-gb*}^LUJr-BkMOJt#$@mwv_o4IY|V3PQBVLqc- z@BmM%Q*>8JrU%Fc~&u#y9l8I3<~whu+vme!#)hWO0$27&zvbfgx? zjrN;CXx1!tQK_Qw`_1-Yxd`-i6X6y{(B$h(_f|lS5!1a5&t!?w{xb=MS><4;b7-m2 zen&pkXumTLpdDE1hM-a?UaU#hu`;DaNf|2Ls^19xxOX8!ar$n!FiuoU8mVK0Cd|~W zaL3*(E7Yl|ixG4*tZhqGm0cC0|An9d*`1RzG@CE;^>6Ox})em6?Hy zqPMDw?P3?UG@6_S&(rW!VLEM>Xn9H_cB%UenFHl~S928+N<{>u@hn3%lzMQL^t@=iIMD>+kHX?Qf7CNdb+!rY}3mcp& zb#5F#tGX8Ck^ow&3(H%S2Sf*>vp={#s`+?koF*lp2KglwJx^tFU&;4xY)cQO)#n58s!xd`Q%Mi0_PM~tH` zIlFwPwG7h9)VyFqPMfGxOIGT{!=6yDBBTc9m*rl?YMK~mSJ*bYRaCK(BKI{A6uGa% z)yCAXDs~0>)|Y*=xx2~h&T4|HOG}}xT(i58yNJoLVrt`B8`CF7lGq)^y=y{h31_N#Kj_ECd;l#QN1w}o$H2hdT_&=y#sSXI%ua|&9#Z+Yw@ zk0Cs5w3xbJz49w6GypJ=+5p76CqiBM z*f&Wc#J~a}*oYmpfSl119fv%tqI+msa1p>qYg1JUHo2xR(Q+n7sB=((^>5#f^t_&+ z{kIgY#NEM%mqISiTX{N=&@%ZICN>cnRI#ekSjo66;M4fXR_WQqrbvf+iXDvT8qlrq z7=Zg(wo7U4OZ|!{My$Y$dum0WD9l+a{J!{YO0FwdVX)K`86f*I>ke2CXBz#ycGhND zfi}JF^Si9S!Mp_y$5(r1Oz4C6&p)x!J@ zMl-7JKBQOTka)&nzgP3v7VWvV?{4>%YL4Dcbz+-FdAD}ezM>eoLGJ*ji z=M*S1JCc4=Z%QM-(d;O4>u03@2>{OwiQ~)7{CNQ*L&m22ccj6!CqubN6S~IQlgqJu z4PpjU8-1_YQSICCkw#4%C#?p8K#m9{0UH^L;C=#JNuoNU7hp_FhX-qlcf`ES`QPt| zMv|7dH6M$I{k{1qs(zVX6M?iMJrBfq+0bi8kdJ#4s42>UoJQtZCiyRl@iH7EgYjcf za#|qU+yb%!3L^u96?9+Zj_;?4j5Az?s37nqI~t13u=^SLhXl4wU86tuQSk^WHrKwW zxqVisiVFa8eP9bP=(OzgaGNQ3}#=1BkSZVfyMq-P#q3CR1JPchEcG;6+#01ae4ei?`gt6 zZZ9}ktrpH{YzjrQ82NIchD=37cOCMZMGfTgHt7{wf}c7BCe! zLvU;MC5C0_I-8I%Pf}=Eh;j``(Kyhk))ac3T%_scNrU~jT!LhXm2y4|;jUA{An{zo zIUcg<{kK;5u>Urt59p8;{>_IL`3q~1dvQ#~Ur`tPGX-IdxiZP^#Th{Jmnh=i9yPGt zFSVY#?bcBU)>XY8-BTI8b9;Z1UVgz|3e-6Q+LP_lENc_GHm{_m_;7Aj7h^N1WOI*^ zu+O6R_L7hlYx-VI%d)0P+6-rXZR%2AF_e}1`Z}K8ek{GZzOIGf-0%4fFj_$lx{~`#{LX!l(z}v@31V)t$mJ0%2@jx zL+Owkf_w@L{*<>bo)~!8=2~dQh?>bFtJ=AkX2OWYVczLwd*aw_ES|c3l2fA@OQ3zw z>!P>hgqMsxG`)f@w(4pQ4fj2CSzOj5W@Gy;yEmYkR(iT zM`FrM&Zf8+ZpPwG=&mRv2cO`}zV`||OQn28&hc_?F7*(4xZF8D%|`U^Ez{yypUB(` zMS`W+-gv}y#IUK>^pXRB7(IF!X2I!*VMG)iNW^gMZk)qC3pwjkY6S;`p;Rdp|2d8@ zM?T{5kMK&q{)2oCmpXB+e?(WGI^rp&{CT0M>GXlMEDmFV9{ub9C!w;aL@qSaw*S@x)3rBWkkBBBy~VMC~G+g^8xG z0}GEqf8bfh90RVv6GK|Gk1o29V_kBXtB`Ar12uRmakqh`oFXkvloiPt(h`hE=Kx!z z5B9vjBU+RM&h-KupdUqg zHwr@8=fFs}eFCVZz<-Pw`iuurf-hK7f+fYSUAhDhoE$5~L+{E|p&YR*6De}bfa|m; z^M^uwG8Q_ncDfWb?Pv*YsZEFQLBT6 zpP!7@$Yd0)y?WC^n5z6MFHR-Mw}oYzS|ig`?i+85IG7409E_`_e)1d!+Npv)v5kC! z?tF-2q?RGsj^$u03`WDFG+1jA`0pi0XU|%H-`uwUPWIfFvOUsT4&H_WP z0mzXTb6Z36KwanA3+{Bj z>f58|RQ>yUZ{DxzQ_BNRACMavlzI^TVgGXF^aVoNKu|4)ZeU>S^mj45DGr-ilIeso zZ9EakbU#o#Ly-IS83+^A-^*;*0l$GL!8@3JC)m1hYIaa#cyL$}m=G|`W)}eaU@Fcnj_VYW5Qk?fOJve7eCcVH$Z^wz97$4v{?j#&O>0vw*DZWx^HMk zJ%Twz-Fg=^1#>&tF_nc9_}q@?xG+2zGm{Ld{vMAE({ND}quDawX9|s5h~6JJQEwEXx|9&%?GrNc50cGhvYwC-x0{ z$C0JN=%Yg}UP6pEVu;8(q)}Z>Le@-j#*ok}pIT+~>dY@cSrkPT zOcq&EQa>d?GP*N{Cgaslq|Gu$Hz{R|`J-2Qy5P(#3yx%l+q z^y&eQdxeK>g_A^k7 zLn(9pfd1^~a15#D*)QnLXqTxN83wvzP$*K@jX@Fxb9=^24CzFx!v+<5q2YpP63fVt zr8^ePhVG?-0{%XNj3uVSnwY#2Qc|AmKj5IMFcWh2RC3dm?<877IqXStziP+;T@d-Q zmFNX!OYP_9|12AnpQrUKwN8^NYg`NPoQ!Z&a#AxgV#Y+?cs<3{5{{&kx7CnuJdywEaUg#kX!1=mR561Yg5FK=MoOmdl=SM z)7t7h0a|c0!g^>9iV=T^#qZWf(Dg?9NG>Yq9V{$vVCZ=iTzPl2w=*6B#c%1rs3NLI z;z-ip7DA8iZwo<@2?whq3DACoHSMpWO_CN;V^q#H>}ANqXy_t8`cB1z`8fbLLjF5* zfF`DfYHV!!dbRmE2l^xFxt1 zCi|Q21Uz~AYa-!F)1Aa8%3?B}9HGbJ2X{Hh{yb}ewomMXrb37L%5P-;!>R+@^Ch01 z?V(rqLEram57wE3Svs&oyAYb)2}kVEg|tIl<6H$hG!48pCwZ~Bsnibj+8Z5;8aE9N z?2vFyPl2pij4WVd$fs_UyA<`N%8FHm6Ad<27Pdw$2QTYeNgUlE9i}o<5yuW=B+XZ^ zIFx=(N0#-`stES-6HBq=P_z|e12PTE5-27W39Oit2ToOFkP2oKkR_Vz+Xai@^*Wd- z$q?T|A+3jOZ+qU30J*adyJa42EEffZZh@Rnf|*GZRP;EUqke z_64ZdTmKDtjb6f{rYg8&u*c3gS$NF?UE_}oXDbvELooWW%i!H^2Rp6NFNcQtD;VdI zuWty&ehozVPtTVTUeE2i22bux2;(>Oxdu+N8+~$pr0~nzQ7O!PRm!p^NgpWzBK*$S z$nN?`)nKKs^vmK~%9S9o#=@|XHeiMT<|DTjO9r$eV?4H+ zql|4}LKJ3v*hKvmh@$QLBOcn?Ts*Km2~pWtH8dAcF}8*g&*Yel?^XNpJer`pKZwZF zUz>();(JjSfO*jQ4U;f=?%YaZiI!|NB#B!R89Ss1j_owqKLpj$o#pdo*qrh2HIAzEae92i@yi_W$TwPCvH|l%`;T>e-~Q99?f*7bc`(Ev zGnl0VKh`XRSuB9kUrayNCUswM1*oMjcp2$bvpj`s!F=Qv1YC^YxSzm5e;_FdcOyfV zE;B!V69aXk8f|2lhWkeZrWa7tB>;^KUH1^cvEheq+GYaSX?)T z7#jn_y~cpKJ5Kz27-(sPzl=t7PkGiK(B5KH=)4T7O=7y%+i6s zihe9B(~nipU=~ZNx-DD>YP1DY9fm$xw*|5)SkJ=zTOsR;PXoVkSb$)gkQ6gyDmfc} z4roxB1&x>LeS8h?8%bob*2q2HUU+c$kr6mUaBCLJs;unt$WSu(1GJ!QInlMk5UW`a zbz;wmn8fj62p7!}1#+$7+>AV7Y*Hu*73)cYwN6TcHOydw%YXuB2yV?{nU<2sqpKvn zJW1rJg2$V&AO;_Xu+Z!v1_nYug&4X?{sca*4-~F<9Skk{ zbgq3GR0Vzs%gd`&gyL}5L6R1MMq4=NTdGK3&{A2SWQ&;rc@Ns0-p6MBL;LhLmSk{z@&jJdUy#^fH?RAsQv%>AN}S_IDM&+POq zD4^nSFv}1eqau$2c^b>Y6349OAugPdig_|n;+UjhVr~0YFiB$}z;c;b6y;6%IhWy| z;d}>@xJST=xx-O-1&E&Rh&*B`C^}#@ycbrM0Zji140%&ZVzA7UF+Ef0J2CFO)E|+B zQt#xpYeNoN7vA~TmwSZd+Kgf^xfNiC+dZ)Gl8{@)N+QlE_~nwa0utQwVNxV)s+iS5 z2mKHSY#kP?w?1Lj4XzrukdaQ?J<5o(`=&CY81R0Z){!S8R?@zijM6tOL3)T$m|nq! zQ+QFDIw?pXC~A>Q*>ozH%XOy-+%cv#ftyA0+2_32@|1(tvzu~u!$CQM``?t6>d}{- z>AT?mOR~b8={2~~&=E`y?#R#^_1@d2`I!lhzIwN8d3XP@e(85wpI~=ndp?B>Wxj zyfSvi_VLFC+iQ4Y(_jCzRsWHy3?TLdoK>Jl8whe7pg7JnQ@`-rfZ2g|rJGI6JsyO3 z|4EL!Fx8jQd+#ZHDe{fk1lY?=r`fkp+4(eAXBcLqS)Bln)!^w2LdMO;;?$c|4LZH( zddOqQ-2ku$o#c^3sRo_A>mt6p1`axWvc~EGwJ2u|IMM{puEs5MXMt;UN6}zRqknrL z@TPkLB3a`0k~OTxlPxy|T(y&ii?fvi;T8fwZW~eDymr^Zht;w^rua(2&N?6>;yT~W zQJn}M&T0%Pa!-O!UKSKzQxDT+m;gGETjn(w>|;_7xj4pTS5#E2ijDv{23Oj!x2N8D z<(yV0-uj zVfPexP+iE*>demD)!E*8S4Xdh)GBAP-qT?^&d}|VKE3-N$vE5YAjkuq+UeWSWukFrN#x~mr}Z=T zqcAVH9RLo?nR$Q$c)x|82Q%bLmWAcVB=vOAW--nW20h*N%;}C;E0jjJg6jl8=4Iop zPTA0UbJU>ybso_1;U>;z%G_+E@a2&;s4tzspavlq=O%~YiE4qd8s*WeJCbGH{%>HD zMpZO2l*T;+V#x86;zWZ+h21lOv%=nMJ20yjV`3?>m{oYh8#TK6OcpINO^bJZP%pMo zvw0fYA*>iWeb#QAEt}%eQFpLQoyz|#>IwowOkMs1a^+8~RZ#xvY2f3Yo!8ncowSxO z`=R^pUiJ+v`gyBSCc7vBcc=4uacIv7_r!jFoGRTpwi_76AqEhLba_M8hqWVsiT z6+5>4@b@C1vPe{{jXYV`O_f9^4TWINDAmTuFwDIe)K%8Fze7k|7I_Jv;;@udSX!#o z?-EOHg&OyL5b2Adirh;<**Fwe9r8IO%*7%riC3fftQ{G{`KqH>M67YiNKIAfx3?g& zj+TsTvYMtGeXURbbS_c|k#?M{6G*~jk#WzFRX(9G7MjI{*H2A49Gg)-alOfFQDsV> ztj5d9E=IGSND{Lja(p@DZ#ED~-;lX)ZnS{zC?sploD@~#7lQsU+|z>wz$olS$ixGY ze8PaQq|$MO%xNMV)bP|?{R(LWOui7(uj z#Y*WLLFr#~jHDl-&(}uq4B?h8O**&lyl%_xZMuIq_Iwobgeq#M@ATRJciXo;;O`7ex`$O+A=BmSu&akSB{mJX<}jVI(#f8TGDbF=d}G zy&UYa$1z^MvE^|Gd;KkpCHn+T$T3_$Lsv$e?}Pz1GUQ|BE2K8VM^fPY$YB*| zP>qgflC;f1H3htul2?s08bc!P@FZ|#3&r|7L^U!JBf|*Vu;^hO-(f0|1t;#{yvR3~ zno&!SL6n$7VRh=_`}#g$B_oV5#7JmUrtK+ZR6#4dvoZx){D& z=^r3?15tu^uOzh#5LrcD_5N?yvA7=l;^kl=#4<7a0nQd=W~}YpcM%`;1AQhFb*}>7 zlEhrh3VsM5EbUN4DeR1#qY*u?s0q54{R#@sFs=r##+&pE0}FB9t-1y8gq5fzE&lwX z(dZTLjfL|3<+uI~B`njKkhcfr)#EiYn}XOz`Wouv1bDGeJs=ds$+~U8B=NQjkroi? zjS$?u7Fan@ibJR)UW>OI8Hq1cC}hl7EcZIlWYUPX6$jG3Dm=JNuZglODH9K}dI@SK zZD3;Rx2 zQJpd*0i9_np1;`Tj~7{&nvkF6QYQw$h=>NT`y(1bgNz!Pfk5-(X|y4F-5()0UYkoI zF4i6F^xd8vA^}cVk&~yJoz^|HKtDz#_XfuF?&D-q~=O+c}c*%K>Xe=JB$xW1Az-z6-!GYUFf+0Y;H-Zt?!RW_27$2+y zx?aM*+Uff}dB_IxkdGA;LM@gjoz#Hf689$XgH3*blHLrz`%_Aar8w4GA&N(hID|xg zna(CWrT%9U;Ow2@VW&F_zeE~~!o*{76}@aQu^)^HMlw1lo|laACO)tQ6)cN2bMAvM zvK*WdE`x*&`6RWDQ@})5;w$AK4Ws+zC@YbI$j{=*PUh&Gu41f%vv-e)qKqu%vv6$B z%(8|VLAjnF%eo0`F140(SFE+kU#{J+(*&?zX#TfCY1tFSdmFtc(VJnI`!m2shSagm z0nT#AKu?1W=QK3+!7RIo%o~n|OuNOXkr)`$_sqW*LQdQGG6<7%?*RAoop84CjSwd5 z-X&1_Zayq$tfa;kNqRGVFVOCNaI^&I93__NV#4j?sxU0BMsDjNlhYrD0oOJad>DbX zBbPPy$^_yE8>X?-Ivu&9F_f##6T2bDLmH~uIRhls!A=pH3&Vn;-NTN+*sQu6{Bq!N zZ|v?7jx}^Todw&Q>3BhA=U5VSD3?1sG4s(~gc7vQ_V;qx#sZd~?L2ZqVb+9sK5SxP zn557pESK#r_BY2Q?-*g_rL)$q+%-J!l{}|Nz z_uQgc$etVKpZ=a3y?W2>S#3@-m`Mh+bkI4Cq#t8+z0dYID6r3FsH>1qv@f)GM)&rd zX+zOOWdfR52RkaP@yazwoJS#97VAtjk;EsaVyl?2^B6-$F(jj1Cg=VR>#Ip#b4y$n z6CCcMF`~D7EW9;?$HAcSXNL0}q|;kfPs1l?v;FPr@T_o1z=`b z0G!wB@@(x=p5qY8J=C#ydgsaL)#dqX2+ciIOz(qPI`HpJKNf&=c|H${F6GJSdn!+1 zt@-KloB(2!C-G9AgmroD!;p-2nVgiTTw6?Bb_|1SC8AfJ!uw=l;Fsr1kWQCp2i4EH zXE)_ZR(mK<^6b7m$$AgvDg5%~DRLE*Cp9kRnHP8u<;k)_d3vRw3&6~>062%oA`nJY z`h!ooAfoBH%|HIr{JTMmY2TyDl*?JI~V+rciD(=2Qa@Kh!G zveyaqk}LRqB<31eWyuZF+0Ttc`k1lW?HNS!-Y2e4J%i*s7IRkJm)(YoB1}I6Cu(gV zoe+aJ3W>`Z8|1mrxf3#_=3Dqo1`+PFh!FR%KkOF!Nw?TZ;qEw`*Ddz>Zn2?AcN}JS zi#@Mf?9<(1KkgPgsHnTt7Illgs52IayDx>7SSXJhD6@Z2+c&^z&q9N;YVj15ntmQc z8;BA-w;wIeworB)bD*xvU#|OU2c?nz1tMiP(i_a4%7^LxlBmtN zHSX8MAvOh!Kb6bX_W<&X31{*d%AUnXFncy1c)kBOl;;cpdXh)I9In;kuMGvW!Xcy? znAvj}Q{Tj*nHd@KjBOr>E~folcqQ|1g0U_Dq6DuqFNr}+|4B(?k4-!XU;=^=4-k|b zg+|$C__7IAW5UQtMnnQF2RB$KFgKYo^P*Q@6r&k?m={o@To*fvHRmZfT`LkMx;h`* zbNL{uosOuoFb74O^ zoe3kgcP6X>JRrTsTmZH%F`dtZVOg!y_;d7S4`UwTmml+pSOsGqmWtf>l9!in z1&Z9wtazvo`ivFJ6Js8)q;w&fSr!t`Sh0L$`{E$fTr5_c$I67ZAx|uc^E^+tpB5a< z&w+i&8rtboIe#Fg^QUrtPZU_5uUY$B_mD3n_jh3V7i-y4COjpQnGKO>h`7!G+mo9+ ztwN2!Do>}nITy67oBQGE)lGVJ-TV`j%euKgFj+eAA3*;+?MIe_*#os7W3^xwV>i+q zLjMB#S!dq?7u4CXieToU>nxKfsI#b&>KXjT{Z`jmk)S%e7*t03Ekw^Qp*N#lCWs?o z;xdu+G-x=>Orw%gO83uDnEMiPo;{SY11x=M19@@T21M+98{oPx>kZm~S0i*~Fte-- zXalSVRw&CVV4*`}@yo!C71nfLgUVzNcR2W9S-sP@7Y*1D{q4nNFjwC9H09fiCPKn( z#PW3f>nsQI)7>Xf-oXr1s%REQFNlwg3d+oX2hT9mZ{&i}ZIevC1ITK*m$dON=NK_d z;rcBf*!UI~lZ;?KCeJbEFq*`D6KUWa@1u}79%cy6 zF_K4tKs?9D5S(NDCtEwtG3wMQa!gX-*!Tl5Nq@@P&BQPb!G(Uvhc}cKDNXk`5QlqF zHO`l0mETfxb^^{`NL^u6&8O*ZCo#%}Ysl~7*#=pS^lyQU;>tvfIP_WW)K4+c!+Gu+ z**1r#HuW=&>6yAqdwQkr)1Ka`hqR|p>M`x9O4+w|jvSWO}jE4Ae7 zu|?^3fYi3VAM$%7^PBn=V(RIL>~+i8BnR_53!kW=Zo&!+&iob9;y9R#>KRQQp^vPi z8ZXdWQnDf3OO6%b+LT_PNpZ(lWAGs{Gm^wenfPAZa^#KVk;)ME(E~^lx8>Hws;QT1 z_gw^{lyQv)$3wZNl$XAfAIr|T+l51H+}$(@U+H`Y-h)ComXeHHyy`;_mV&G}$0BG0 zQG#cF^-UKE{lUtE;z8apQL{v!a}g#rO`|l<@gaL_-^>+TA8k210c8F zqd+Ie-IDk47=&BGv-DWz^%Xv1>YUW-{7-{Jel+Vy5+>a1sNJT)A)`X=Z zl<>Uv8SS$Yu#`38r>ZITuR+wi!n@#kbzDyY~hCEXnF{!oW0--_AZ2dx$r_*=2fRtriM+_XIwZA z-v@ZC!gLzDE=PySvFkECy|F93dhGfMQsCHi1u$7UG8X*^SeZZl6a26Mf%Ps%!R<*+ zC6S(cKLG5w4mg-N2`hcE!Af!!P8k-C_qK5KDdwU0=S=;v7=G zzG{1AD%!sdozq?Ir8`)s>tf1?WNRf^cTEoHl`o3)&cl;=9`zyho+U z3_z2qS&U)MR{8FLcwR@K{tlGiT=*5tSBvDMP+Y;!-&zJgtXsjypMZb`g%)Vm^i}l* z_LmT%PxP}nJ(|JTp4v*Uibe&c2Kzeka~u*`pE33ozu`OFgb6EG-`W_69D8+Q7F4Qv4c{naSu3yTE$ zyKiAbzWWyEA%1MMa zbfHmuBpP+ye~zrc%ZE$h)bINA-@6FapMs4QdUQLlgY5Wq`zjh1^ggx0jxpgkS5 z{r^U;DW|O@!*%I%JEStj5;N<+>_5L z_W=r>W6!bRa|Zb2@7vH{Cc*+shv|>d@TsScd-8z(@>wy;ld@WTe@&eU9@QQ1BFV19 zGH|L4?Cb$y1K~|{JLnW#?O}C$8@|YAagRftCA@bby*zJyjmX#YuEAS9JuvwRL^jdw zp!4-(NSLrQ6s6A#6cHq2C6*s`KL9k{ ze4C4Lq~&be)3>=O`kubcbuGg5x4G!+=2KfVG=<;hx-J)izHTDi!U+HK-{uOc7lTTj zO+D#vbHznX8J1jk-{zuPzR|b2@Cl(#-{!JAeVfbvZ-1Lh%Ev%8Xnxs*^xxnEUBi*H zWG@V{bcK*Puzb_UeHgmMeJ|haTU|!xYALJOL`z;^{Q8znoqF!WTu&i1c_4B`nR3|MF*d~Ay7WI0|b!jb3nhGOrR+ZwzUe8gMGPCd_U8TqXdrgG?0uRHHGWg1m zbP2^&UmyC5GN3$;tg1X#RWS}dORn&A0CZd-$#{iQ;k^(fMK#RJSi~+b{9;!Q zG*O|QMix*x<^$!4-9O=_d4o-^V))<7!HmTFTulYyR@fDOjwT(3GV(R*3#sE5Q?D!< z1WSeRzonI51#o{=5S;tw4aOb0Z{s{kf?SBm6$RhU-`nvS|Mx!ObtS5Kj_>X%VZ@@P z>huY(V=#~C^a(GSC*$BW$3u4dQ^;BcWr;=6!`Yn}c+~IuH(ZR}u0on#XfN=$yzg>( zG4yx2n1o%C;luwfmxgw;H5ds*aj2fv(XQBOeTKwkaGW0!i)rMCxJXlF$EqsvAuijl z{E828RieQ0jX2xJ*yR8ChqzEx-asb2oJqUZx_g=0=fJYyb6cWR34l>zEu%SbzV35d z%=wnqZ`4?00cn6zd9}6R=eFK0XqNt0t?-pCZByY%K3_}|%r8ICq$oj^*)M~anU zBczq_3b+eN-sT+HB}7{MobF?ZiKaf@BxCP`T~Te~iU3Q(G&z#6|3R5JHL0wi zjr%$NuYbqu8YuqjzvE?UTaV9p=}KPkSw{3a{||k}OZQhNB2QxD_Vg93J@!xahzQ*)J_?>$W*Y$}X0R{7qciE-t)!w)I<2M%vj;Bx6R?NS(?Qphk7xaKvef;d@L zg&VA^^sV?vufQZ@@=$^Cy}B=W*@2-F2(R#sFfkDCAbS4Bay^X4PFyYw(-|4l?}I1K zqjXx|I}SFN>wCxI>8b0h6U8>wBLgTe8=Pxtq7wz$gXpL(D)x;&`m@ z39DH4cmyYA;iWG;#X=Yvq6)kAKA30_mu-cE-DJj;mm!43APK`J21ztw0XLZKYvoM{ z#`Ra&_~uuJh)t(JbNjPCkVq8$()ZUOmE#w5%n`J^y>QW|dU z2Gdhm(Q&*aJ(V8jAtZa0n~;Z&F~I3!ACCIfQ*IW;l0fw)6JUODtapJd+$=hhcshkk z0JV8aujW{=M>tc`j1>p(BYg*RZ(~09HaeZz(r3ar2j`!!Q-1Nv%3``p#iCP&a`fp> zeMAr)qgLqboSKMgr=!($Gko4VPdsz>mHdASTJJQRcLEN^S@WNh<4+X(;X?jUv!sJ3 zWt0PN;sJt81tA_Fm>HTdl?>x<>E}Lv7-JT70e-9IpOkKEIlk%OmbAMzwW1}R^Bvr> zY-LL-S$}+bg_~N{x;$CGuqBmlbyrUq(KL+zlJ(Qpu4-GGYMHRQWo=t(*{Wpyfoqqq zYF)8k%Sj8|<62fvSUz^_ve7F>j~PCG@HsQEjkQ9xs5Llh(27qEuEuiua+L;@Qp*t1ruIi@8(ti6@gmEIv(_^ zfIl9;)xfmyB|rQv=#Je=1h#@mvtNdYv%N?uyko{hTE3Do3v|~1F5|Q$whqaxf&eSk zQZSp>9kVt_m;%Xiv|DC~S)C96a>%y|(bM>M0OXy5(9Vi0&GyPk-VpKMXl>iz6zX=sDr;Qs@B0B zARYD9qz6cPt8q~&YiNrU?F#h>A`Z(drE|sCm78V02LD_{(G~k0L~71Q@~iAOZ5J3d zs#?E5rb3isP^RmkQ>Jhr0t3$M)om>>N^9C$R@N_Do`#WG(N=$aOWQH-%KGmvOV_uq zUI#<7vMDfX%F30kZ7@#DRso4fM=gUbt6%BXuXfw&k6E^^rGDA!`qtyutZF&FWp&#! zk~RfKE;t7GZeym`u359HmC2@Bn9QkcaN&~?Aw&Kwp8o#wQVg;f$7uSwX0T&6f06K%i72+-L`D?iWbthkrkNMf48;m z7!cL3a1okXyQ0laA?2gjQdoSaV8AqY)vA^il$s=M%fJLluU@-qReg)jQd3|MbF(5( z2>u1CXiW=wQ(!#FQY|N}ZA~G21r$di&E+l7RVzH1;o04@-oU6inaL5#rCxoFHwB{e zC=+R#0`*x!m8|E?5dDBM`+%a*SKm)Us@9@V;fWqliD=viE_+saepamkB0ICHs14nmT{Z)BsM3@Q)LQ zb?p2`4;wpz8!!0yz$!j4AREw*z7)^X4}*U`ihuRdX$JlESGZp%3fv*{)vWDGzTGik z-$Q0kN7!P(eFh+G>MD0RiSfs3zv#$q#YJ@hz6gv|F(BZ*55J4?!{8l*7NwpC;bwR- z)RDsn<-j8udB1upo?Gz4s0?jZ-ZK{-=+@-v;Mss5#zU$SKgJ|ma8n;gUx`|3@8a6x zs5-QGelbq+i2s7(6M(s+_zGa26wKQQjjB+|`*3@TJHBK{NmMN=nGSbF2}9S2yB@Bk zHkG^*jjHP;^hR;-mRJu7%`-ytPDw2&KNt6)vfAP@HLaX{V)m|zs2T^iOr2>n#fNOB z^*6yME9uWx69051Dd$wtJ+F%Ry{hS+P)*EP;*Re@o-g#c6{mM5#Cpe~YJa$v8ehv? z-%(5Y9kt|kQBUUO&7Snzz3Bd=7ej~krh5=vOI7z_zV7cso==M#?8{hN`jO@`ao5%} z^j>k34b;Z94b=1e{){_nz<>c!)iU5fxUEANcaqaPR;hmPJn0~GFYd7ePWwZFVjbb_80~b2q ztIxgImF~tW3^Wr2@{!{#+$@Gt#Ov-lg|6Tlprx5?@ z6!IB8m7zz7dzQE#O(Xsv;ucSzkJ>nPdfoIgHC5b2;vOgNDG0UH8PlnsoztoFVKb^{ zMAckz(=%AdE}21Yx6WXS?+T`LCh@&zGVX2rQu2@XWeEmn-9D^L^_*2V9a7DjUwoRU zx5ONB_+-ELAxZ6AN)n$-%wNO}?N2^^4`97&K7jf^@qhylu++W4K&k_n?!*I0zZ$Nk z_B)uAE5$ttZl(J1g7X$c)x!(k8&RqLz2FZEDpmC%e^_9tBM%|vo#H-w2<5aEf3c`i z4Oqh}ZA^7>P0t4+?xHvul z+ec^j(dK=JmNHRsBkA$)k15ENPGAK(A+*nPhj|c51&|V(2zr>pes1%g*1Udqcjqcz; z#Hvsk35&soGxduE>Vxr90HHSs)ED=}GwgYR24TF)TN&O3)B|7rYZvHq2^)_1|a-^A<#sD7UFttrnjF!i`6KBmJ75*H4D@(&|zv)faQL%#ZS~7uBJ)YjS_Z*+BX1D zJpt$-oLZkFVZR1c5?JX$9|~oQI#4JBVNxEY4iU;)KqY}=J*W{-Dc(muRKlhUv`QTz z(02q{t(FP2TA&luv4LWg=BZfaXuxE0qlBF&Ve8bX0TYs4jj#zgpL&gi-HNanpzB4u z_W|PB)f*-3MTxgw{ZzF3$ME06rC5LC9IIL-BWU4)ta=i8s8)vnDn*-mTEf-|^gZ<} zfi4otP3kwo^C3XbVC42&#H&y*02+_>_Kt-822iy+U%e~PUjdyQIA8rypl}gWIA8r) zpaBA1pgsZ@r6vQKpe|JZ5NL%5eJYe^3gw0B-vQdJO#)q{b_Lk}t`z7Jj3HU>k9bhn zVA!7px)j!m(7!w=Do}ZpvRtZ45l^Xs9#kP=lLWd_4HT%=g9b?o84nsF&^ZEKuf_=F zHi2$dlO^mi51L|_Nd2WTv@f@-{RFxdBkxjmhuUAD)#C`=r4A72QY_Dxst46#fxa`1 z&@*aj0rad|E>P1%Qf&Q#E3N&F3 z!~UVp5lE;0Z*`$SvHckq3|t}5o%0Bl2d)!HOV&4VO950LxUB$c2;5!(^$*-x01XJ- zEzmv(k>{Ymy#gIA(2&6W0&Np09(YioOR@f0s+t0i3zS$uXiVUFfwU|W11}3S;t+;S z3cM=Ni2}_Iyd}`50?i4$QxNa4!21H7wV3ga2z)5eM*=Mkd{jVrOyE<2YH_ZuRJ8^^ zHyYG0OD3uYRa^=SrfNzT!9Aw*G`MYo=~;Fw{AN;jZ>ST+&;&WO=3mDuWZai@-< z{~~dl#y(kUt94`FDE0a1SY;KbA#S2#BHX!f8T!XSgX(W9$k1dHGs6zTztWDt&A@M~ z#e27w4_D_@t_S9xO49T!JHr^RUaQ=KI!gM0PzKZ=E9oaUTRlH{qJ7YYtE=uY4%+Y- zTwDFF>M3wwXoIS)rhjbpb8x$+*q~-rcYyzi)gQpU9&UrWs7JZkpl;|<4Yy}mjTuny z_Na&dFER27)X+Vq^h)6KnhB_PYMug(RZE#`YTqzzwSM2$@&=U>OwY0}$f0&*P|HJ2 zPP9pLa}Qf>m_>K--e1C9H}=aO4eGl+mx1zoJttz+@L?}%V@&VbP=lJ#y955CdQS=s zS8ICD1?Jw~l%x}xLS2WkaKo#0SA`dD*e>q7;=b1R zs&GL44Svndr!1}i6qL5OJ>UjZKe!EQYJGX6LCvqHR9c3Gb=ANeQ6G_Vys0-Nua5(B zOZ~`*rOs;TFmTUMpL)~6obou}w=^*B_Zv=x|E`8C+$S5(fLk@-t|D7aAMgU)69&8l z_xZ_R_6?|ghXkVmHGfDE+#`pS!A%dTg3Iy^NGh5V8USU3YH-TnriaAgQig!q%OT}x zXJ}MY`t-*-3qX@{mcTvDp;Q++YvI4uIScOl&V!&IF}k&!WzCv!?Oy)^eowWUb=6i& zmXN+_EbGS0iLa`|yVu*}l9c?Gdb+7(6|$9KRz8?L3E9Um{Z)Jx-^g8!rOP4Is%p>K}+ z9hOE4DJvQ$g4^vA=-!&7`?UDqn!s3pnLuvV#1G)Fo~Swh75+8T=2lu#E~o=DMprY% z=4wjPmH&ytf7(oPo-^}gP#!t+cjPdWvVA`O3}C)LlWAQylk$Hxhqr~#`!gxeXP~!K z*}h*u554vk*_vq6^4g$OtFV&MHv0s)--Hn%?)fUz_PKKtwU|@R z9Rv5-@l)V_G=63+WA*IWIhAL}5A12FAw#Ld@_BTdhVBJS?|F3N^BxXidc=BF+-Jw10{_SJPKR4Lhk5xz{GkKruMqdy@pF;Z4LvRe&5)ssF^4X6 zpB-O@Su$R(LFp9w*B>M$C7}(&di9}%Y{k^1Px%>Wh#$CH-iuKG3+2CLKDDuJei_=% zH=&=lfb`eRECZj3L%%DrcGqx4zs{)?YIyb`YGezado&bXZ=zpFvF^p1KAX4UDn zkC$)`|GGeD0GbMDSOdeJQhzC#g_Vi<0x_%^lD7!Nc!vWzB?qm*OG|g=psA`zJuHys z5>;;tv{5;w$6~{Ca(||y!Tfl1=3OvPzMUMF>+ez zW;H~et|4`0=>>ou^`Hj;?WMjHh+NuLLX{8nc{a-(e}tYY{h;(pKn(oOMqb`3MgNYo0o`qs`R9? zSJfy#tn^HzFiPEBz-6?0GRNfwHAcOwp(4f`t3L1`#v7~tDbS_r{<62#I8`->Y%f)B zm3@jg0;hY>{biBBBz4rSJUhq6*?8~Lg)%lVFOY=-@kKUMrR$%M+tsFE} z9i=`LNY|I6Rda%p>H2bSmHtVmcNR<%4!e#Mfp@feLd)Hgq@%UdC;c_JAo|l z_f+Vjio>z{sQ;b{-Bj^xK(=ut?B0qO18upmj*9Jpb*f2ofz%%aPEr#DdQWQIdNoU+ zr_}a}zXdYtLxC<(f2#O2aI(rs_0_p;SEuEmVxwJMkb`2zsp?S;sSE4@#+mBgVH9Aa zy25TU&Q`B@&@J{@Kwo;$bM{2zTvak$Q@(BQ3uu-H?Xu??o7J5j)T45-alU%XgT_=Y zH7-Q+<=p?Vg30@~U%t8MCDfi9^1tnwmboBCBJ=r1|S%Mez9 zRRPxdU6t1w*QvJ!Iz#oWdR1Mo&XV1^jcTu|Wv3My^-MX2v@WCH<1|BXzQd)WYg_jGNWv0&P@FtKS3kcY!WY z7gzty_^BGeS0W+j-GFXY2Yb-d)t?(bQ)@ivML>6`9|*Kjy#=0ksa2C1Z=?FM+A!}@ z7tatVV)xjr?pC*XP`t;hfF2U)QuV)xdl$f{iezuRyJseuKpqehLY^cT6%eu@AP^!F z!YdL;fPmmD49NhaNhV|xB*-HX6cN$op)0PqD7eas?o~krUm&0&dR?!g;%h-!#JBFE ztFEs9Usd-xb0!HcyZ8IPKbo4Z?&|95?&|95$2q4cImY#`lh%sG9yPg(h*dHOOXLgmUMiEY>|A?!(D`^5o+z0>sy*K^_|V_JKj7w6E09j;%#cu@?nu{zg_qF7_zw3G#| zm&7E4oy*vzj6EkxQx+rbdV@_%xyJRfc!{xFy|YrT1C~P@?&4N&EwEQaKgOODi&7p@ zuTld3J?Ba7vd;CYc$3qpt?zcdCXO>kw&1_T>*5QI@!WApd}}b8I}Qo&B<3O>PWf8C zA(AF*jI73+Vm)JIHMY9m5-%{Ot;S*TGjoB}ANx}5VeuzN+S}qojd}N{Jmh*?d}^@Q zQl0>I(x!aR^^S<8V_yT-(Cx}5>+Bx7sDQ{8&IPl!9F z5*Nxh(*22eU1P$NI?ny67tM?(alFg{HhPZJ+ylF^{n|;*zu%-9L!s23wN$KkgsJ9)qnctHX4jZqm-ShC{5dImmJ90aYPtSUH_B zJsRU>qrqr2CdidKA4X%ICqX`7uv%c9|k_%BNdCS59YapCHOy*{z1s_6edq)9MFLC}W%FY+1x<*LhcDT;u8~ z#~W--#tu(US{*R}(UEY|k?|b@K zSR9o{7wG8Ub8%Fj##~&7PdvZkG#6Te^7Xf|Lm6Lr2H4oq3=uWhU{v={JVWfXFgk)5t=9oZchqd<%>FG^1D4a2xwJ0_&9dD@Pj5jbX~OG6#jz zJcBZaIk0h=qoPLGJXd7)iYm0Rb(#6DFt$0f!jbk!W>wTkn{rR)6%LGKDU#D`sfPQ+ zhne}JNN!{7I`Kv3RY*$@QW{~)qQ=OxZ0x3}aWdb=Hbh-0%WQ0O)OfkuU?OW-)I@n^ zo#rC4Hbj-lAqM**^TDV|vdG3BkD4Mcvax5QrpjtN--A)p0|x`e{4*PFcBx(W@mX(2g|YIiKSy0=rFkyP`b$)Wja`}bNz_aS_H~p` zj$)q2CH3?yd7q<%O8H-ov`QIW&$4joRWiZGmWV2uWn(`@`Q-@4G|$Uz6O#7)drIdZA33&yoSVJbJP0ZewRhFO_*V)-SqQj$ll4 zxklb=r(w+_x7%2k=;iWV8_SQrPR_k5T>1)m2V=Tju9tsfti?OO`y=WG`459#-+hU= zLAn>PWU#vj~IdX{qOpq%J^T6Q;B zdDax~GcsRelB~@hIl;!hj(S$kHW=BZy|T$*C(>qk_sM+*`*ZeU*M9k?z*o<&_5eDZ3)-fUGx|J7%6%=eg|x* z!Orb*53oXwi6Z2CO-{41`@OHrD{XAM_mEs+W6yZsl$&krW$)Ya2^%}?eNVn_V<)^v z<(D@0SMLY1!*Z@4%KO=SOy<~FhnVA%A7sQVIuEjZEGL+>c|E$td?IJr*mm!yl3v11 z^Xz@jdh6mQT~dt z7O}cVPR!48l#TU?k!q2R4T*874{dCGj8_py%d?6#7>IZI=@sK-}O>UHA&9xGy!)b%ShwhLIY+Ga5FTf3?!8Cxe_>ai{cFOcGY z&w0jl-5P^;!5QpmkBtJa3DQ{H-+QbEw*3Y|sk~h=nQEVn?TN`!+g4H9aY(&2CP&E| z32R}0{tT7C*l|fbb5&Q3#SqV2mCG1uYd)|(jIHywobgsnuDa4-x18}luzG{tb;dDZ z3k~+b8NcgeFxX3JX?Kbr*-Sl zQ-y9KS+KJXf48@yS85A!H0Ii~30r2;$m8s-RvC=E-`;AS!N~jVtu|>)lK0zN?JyX5 zzkSpJ#+G@%&B(^LyFYQr(pSC8X(Z=Be7DwnGnGzQVTW^79b?C1$ZH;?78s1Y=0U32 zVB|FqQY#HcUh{csjlsxkK2P0lFsj2~wS}?kM0wAN9R@2GW4c`iD{Ok2(*F@NM1A8( z%U1*Jw3!`-sgX8zMThfMHDh|sH9{>~OI-Att5Ds`7}aQrC{mAV%)6rJBWjd-+D^Mv zj8f0rSfv=PUbV52Vyt?bF@1tFP93w;@^Sm=TN_&fEM^^*emsWO+9j&_7RDs4wM*14 z#+HdqJ#lYQy}%fqnk?=xNqKH1N|G}lPr`MJz|OI;CtT&~LXCN8CYh?9)EHKLYdTC- z-G9Se#EG;^#YM)V5YJCM(+x(pXKT#GHg+guV~0y^j8=6sBl7v|v@u;D=ul~6w5khZ zM>8Jj;8#O*>D<<{)kqub5u`mdej7=Rn`^!PyF;~F zZewqBs8QWEP}&-CMz8le)T-|oyH#A!>(dVPs^oT^Z#u9BG>#$IMj?_^x9K4y$$`Pp@~^5Q{ivhyvy-w=z{9gMYz zn|kL1`|fv?)*?3a&Qpt3w@n)RBd5(VSaRZEr2X1pPa$oode2}1q%BqMyL7(ik=CNh z4c4oR>e!;1@78IwBY%yG*-Y3P@n-Lsj@PJMgDvRNspB%W%V6L1?$+^Ib;Mw_cYmFV z-J-d4I47s$b*c|zYs6XS^aeJb%UdHZnBhyfUZtCSyJqBiSE>f4T<0x3=Y;zP^|-<2 zo|6hJ=^o;_&fCn`O^ngJa$d(9)NY+7{&~(7uA5Y+-xK9BJ^{E{4P;E80Nku@VoaX^ z{8~L@FggKPtG+N8odB#?vG)>}HG)n6ZdF4VqZ5F_j<>0P+bB(+0Blf?Kg1ZH0Nk!# zHyE7&+^*b@=(OZM<2v51au~Z+^y?Gjx?S~SOl!gIs%kq?k``PB%1;^7Gr~soH-piB z$VT-KgON4eNJkL(cRYq>gpI1B!DvRwytTXlQXl5<|idsIDRdVaW9Ei@R-5BI8T3`XF>(C7Bp2Y9}QXH z+NR1iCWj2oN7|(Zt7L42p}ccwJ}7Tyj3nFP*`^+3tVJ9FSHh}9b;#pE`8AX$3c0M#<=tc)GY?1(jQR2F_cvL1L}8->CzuiWh01-Zlwp+ zbd8BcMUxUARD4a{r2SEK;xnS_#O%>qWB#bz7gD~XlH`0yl^BfVd`OiWjO2Vsy)~XG zV@S@2)DexboDZoJ1|vBiQsYWACCT}aDq~E``H-TIRM9wEJSJZ}tX3Ip6=U0VK9=QS z^`pT^mWP#l0`rt4%fo8KL|p>O@~|4GF_z_FRc0`fbmqdPZ&&MQXr81m+tnQ!5QA_Ml-b-|Oq`N!Rr3Ryx*rBQnMlG>JO}{iO z%MLYDV=T)KHP>Jy%MNv)p(I&$sQ+S2%d$hg!dQ#Qyf9xpsybb!OTXm8V_Z5Y4MwFut_B7SB}#u>6)>ht ze_UO{m@a*%y6p;GcPf3S`p#ffIzBjjrB0*LcdF&p;nH`i8#TtI?^NpzMy2mm?^~28 zeWyCkm@a*%^3)KQ7IAc9KHj?!Z!qfjUFz425hY=_X$*EECTf=|YovTu+H{SH`^$Ev z?NTLIh0~r;rd_ZnNDg_Bze;{>k5E>`^lfMt!tL%{3U6w@2l!V9J=BDXz>ts*lFFkM^j6 z2BY%!s0KqxLi&=E>HLio|zfBtT^g(sVU?kZ=^`@aD$quSxjA_Z}d3uTG zQ3!7CL(k#=5zvKa8t~>E@hrkp9AtQeQz>2w3ZI&uI4I`eG922*5NBsur!J)}rIulC z9LeyxU6u}?TB^qqsYG2PXIOL7EuhQ#2|RTRNZjqEQtILf>ad0#`nHbOG4~}?DI}W< zPa#knrgGla@p$qK929Q&5+%{QncidQ+fS8DiFN~L7gM@LHcLVrtau%BA@gr7iO0~l zP1U)GvobQ2GKY%+U3mV0>ierfzXYQPQ!17C@AON!Hx+J7bGvby>-Ka)&3OS!qT7e` zN(zdxT2i;RrgZifg_T&ydGVYF!g+u$JdH#xUj@idGPM)$!P8EZx{6D=i#a^N;q4rL zn#0dK!Y?E25^r*hrqroN9h5r!5mSEMhLUc}>3UguqHFrgwboj#TR=nIR=U1aQy168 zjpwoG9UfHcC_H^dW&M+7h{~gui2=l$z&PB^5l(Z2&*E@@hFZ5rAgpy#3ep@)6DA;D ziD^u!dviL6$DU0z8n)l3Rtr!Yw%5y_cO}j;g;FnNo-?^Df19w@5ZxwD-O%#1))Pz5 zb!t>MDkTL_TL8F<%>P<0i&CZdO%bOur7mRyr~Z~HwQST2mX2-YcA&0;-5e6?(UE1xC_FP~$!~?VeK^~uk$5hI%F5#y9Uq2mRbqmo8C5 zJ&LK;dR~y++ImirJgZt^t;xSk@1)UT;@lnwo!XZErW}%UCd)|>?-=CqSj#aQ>eO&A z;0eeq%0+uWy1%4Y%z1UZrrZr0g=ZqeG{0tgf(p+jQoOTe+NR#Y^aL&XY2CxzwsQP- zK$qbbj*)`mHMH_-sh;O}f>ykf=UXhZQ#L(g*~ytor{_n*^x?2YuUqT`=KQ%0t-9zsPT{f$M#f*rJ^LY#2!d9sQwCjM-2$3k zOZ6agy9>}Ie&ll7>P!mu?IfOLvS6exX?mUN>~|fec#A$9gC{A$Q$_GRn@b_RRd`C3 z%F;H(2?sF^$*;t4N4OMWS44~+iB1|FLzHeqsZ%M&;zl%)VJBxT$^ZW{C{e+6CrPZZ zZj;t^^cYHAuW()5Cf;fHbnP@H*+5r>4b&dE*26HgthDyPDc)r)eAwPfJYh_|Ih&;= z%Jyiq#nu`^-i5;RxRh(~B!W6d+x)h6*hxdFF3#)56S|a_Y_(zzE)%0m(NOyU&JwjA zE@Wxz+1l$ip%@pQS|*-tTVNT-pK8se+lOXeYlWg)`&6^@^(ag7sz(Xux`zCGYu3}P zp-Xi3qqF71;eUVD`-ICPsKkvd&+QDIF}l~nP>DP6xfqwY2hc6vXL@QYB|dEv)-A8$ z=3Z1U-5T0Yb9%+ZUkUAvJHscLCsA4++V>pe>Q6CxM3Db4MLG7IEx*+1SCcR2Homm3 z#lP!OYwtRqOLY3x3%Rc|IlisNYR^!^zMxTfj@;5)DRj&rZvVErs@H2&J9;)W40TI} zdpt5#m*u2CRap1Co*i^pk1r=|oA>f^sznIUD)-*0;jmsu=v-RPB||&l8PkrUC;npa zhO8J7ho>Ur@Eec61U!|PfZwio2T%&)QxHxQ)A3i1Z*!;OuME$KPRC!l$i`m|=yO1G z2L5u9nv37FuuAHU_qX-N^Ob!?Gycj&9^!w663)l_SI@_LP|ru&aB)mrfWHy=E5zSO z{EfojX#9=A-#Gk@$KOQ!;hk_O`Iwj_PU3Gg{)+L}UtA=n<4ML7;u7(h@QKIq7bE6E zj=A`)Lwr5r8zD<0XdCfPr$)RXu@Uzp=i|M!^AR^6*Z=1uZa(6g5Z8pbCd4%%t_g7q z5w{R=3lX;vaSIW*2z(YHya?gN;Jp~>ixIaNaf=bR1kXh+LEIAYH2!wtZ=+laK1&g| z6nvH?HFQMMqi1#vC>hN+$S-6&UzG5FhwZy#-xH{jhVHz556 zF$=#t@w-v3Lfk6EtwP)?#H~WyYVcW&xYgi;9eVt2lsDrE*P9V{GoDes8F4owZY|_r zi@3Fre=XwHB5plywysCqda)M2JMp_w`UKtn>#u14eJI01z$K!X;UvJ+=ot)s91~zT z4=^8Z#39(iF)JCaVYq?eT@1G}e2C#rz^gkR0Nmku6)+!tN${{bFd#Q}t2jJhwUFxL z0q^7P7d=IBRCO8HJN9c(4n*qkfn#G2tFnQmu{)8gQb-r&{aP*`SP>QDT03xhY$`vM zl`3u@_y#_#);as~*v_u!2QCBs>xkJZ-Wzy8rgDj+3_OvxJ$8@yV&HSJIm~UV_q$@CM%77ASZup~ck*$`;phz>9o>y&+xp2 zm99qtw~BqkSEKje82*M>&SX^ku9g1AmwMf?R*QF@OH@(@1v zg7Z49#O|jc4&F{4SS%j7z_fTl-b9>4G=JL$2)? zZ0q!@_~3#^JMDC(j@S>_Ys8;A9d?Zv@kXcqa@>e_5T0PdA0Rv#;lr*OCgwAQD>!Bj z!ysU185-f~{HnNVM11EM*P@i;Dn{NuqDSYW>b}AKI)7%`Grn*}=dGf!a8~D!T{8>k zBD|zI*AvWb5A%O<MI%LjSy+@0IHf2d zF-P5A^oF2zo00gc*j7{rE!{F~W@3&cn{(K;hxr^}_zJ^A3=acRS+l|U1CBWXI7844 zoE+2_x*_jAXJcZ2_k$a?=f*4bau$Nkio|qpPA?Sdu39fzf0? zXQfO}qL_R!Nxn5YyF-)v+tIUtbCPF(kLtM9{qoq}$y?p;k6j`j z0{;<6EloKf`@0jyjZNisQQWVakCFd%4aj9^bV9;e1hm*0{CnC|IgLb}eDba!FRY zT#_b?Vyj!gbu2gZROY9sNliKpT+i~X=U!OP z60YaE+`)C(!gblgEpP{yzEwP3@@%&pb)e)L*EXi##!F=b=Y`g>|qN&qL9O+);pWtXK5^~^7u zm3CCsLeCG#Ys==QNp(vZ%}sZf9l(3)E*YEc`iyJw8Q16}x5JNIx?9l*idEFJNf>3H zcs`Rm%U(>&KsX=oWhLFqP^3i}inJ(~<8wK_57Xx=qCcv3mvu@%st%ysqw4jtZV10$ zmX*F$d{#zd@V>!kAm#_q3`DM>DFab%|F{A!H%EFVtrj^l0kA-kc8y}GN;tKg=`ZE7 z%DJp^&RfN)RZL%v)O^vP#&mrG7leGzl0W)9WrvPm%+N8vS{l~JwM zOzM-d+@#(udqCzsqkBX@1N;ZZ z`T+CA_vpu0GQXGal)sl5K+In<8&KjWo*0(1$=z#eb_cR-QCYcMR*t7`>KR$DBef!G zrRRgG7iGQ6r61!GKjXaQ`#qU;lBGS#e8|cTO)2LYq?~7*R7E$5*PukanZuJb{dm?I z&$roM0A@`8HY*jme#)YL|4YsqBnz`aHX~+(T+MLHu%{5eWyW4mZW;D|HhB@p5OeoA-E%g` z_nGE1hQw!&r^Cf>hzu8vi(D6ti~jD^OLpgYu~K+adGYSwJt`j09?pyQie|YPaJjq> z@Ot?G;EnQOz&kj86UT2se4bb*KJAew?iW7-t`hG8{#JaJnI|@jzae~vIF^%#_XDLO zJOJ-Q&%+nQX8;z73c&H=I>0I7KJdAOVWqeWF;|KQ0Yjk7kyoOuLWVwuEe!8sxQF3U zhJ}hKeGFT4*hMj$U8|x$OWez_#Z587Lol1+8BxnReATTviefe~+|BR^LlI5!l3`5r zl=#mwvpJl@uouS^a`-NWo1=$y?2uOIrCdIS%?w)@Zen;B!`%$`Fg(Ig#IRHht75vK zHTE$)qXY4*>Oe8a7`i$Rh`%Y*)p1z-ebKItlk6|Ul7KY0hZf3Zb;fD-eiJX^V5knutN`@^AmoXgC zg(zn-^f7EWtZli^H;yBQu~m_3nG z88$QAq+?1cekQ}^r6l<#4)11|UBHZ$DB@CZXOiBlQQWVngpZiZqqrDii6!Eh$S zO$>K46jPXn;Y^0j43|&gHstU=4j8iq3&HZ$DK@Cd`~i@6kryBQu~n0*PyGi+wKiDCAo9M7dg%bvMH!46`q1dWOvmH!;kv;CP133^y@6!cfelRE4h){g|lm^#FoZlHgp1)eP$Z z@isz5FpgnohRJ~Wu@}VF#x9Os7kg*yeX-BP7RRlPI}ukDKO_G7_*>(*#J><9l`u46 zT*8Eeixcin*qiWuLQ$s`oqp5l+fJ#SdvzYtIoP?m^V-f`6YCP+PVAX9I;k}2@}&7m zHz(bhv^i;O(t}BFC#mG*pe@M+t8_h>klri3 zFx{8ll)fT;b^2}TucUvQ?#f8Y7@sjc4W@cuVFY9+%f696< z%hUaw?vuJN>war@PxgfDS=kNQ3$w4yUX%UX>_287$o?|>r|hVlgq-A@b8?2{T$Qsc z=RM5yIBCYNb4Q#w#A6>n0k>m1W7oF}-es79luYa^cSlMN-WPrbQqC5Mcuiav%-?t; zI=(BAhc^UK54*Y{?B+IN_x396);3{x_G;|LF2?TbQtZ06V3&0n ze3EOii@E~4rYo^ax(dF|Y9YiSeyqzKPY>&8cuV{{2y3WQUzhu&5Otj>zL{YtnJ!me zpG+|uyI$lHVoTRc0IyBC32*~L&EdzCR}izVQ!12Ags%sls*IDS2+I7Op;`1@;t<7nnhXPA)MZw zc;<8`nQ!OtQ{C4`3*pT^1UM`^#w&!TT$D8%;TbtZS;bJxP?tlTn>gmK9u+Yt-Qx$0 zK7%MV9C*g3h*^8)*MPU5`FFtG3_oSq=`4yF!f+bH5W`y-KF;uUh9?-h&L;W{hWQM2 z3miI|+M#U=T$y=hhf}x1%{{3FbPMYmUEhm(VQ(*L`Ei*9<9ZWJV|X#cISl7B91%nG zcb`Kvk1}-XKzX0Cj%cx8?4uhx5QkIslslg^XHq`3bH?zK3I8hWq<4l_jNgL$VQu-0 zoj4@big$*^WGYe9KQX0SW_w{LedwYMxQ(Ido#j4tF=;HtE1W&KU|Z5*Qxt4MG$5TS zNpU8i;&Us!{Ta3g_XTing?FsO{wSOrB_KQ&)&_To7>G zM`1+MS6-F_Dts>?6L1Y|mJ+waYDug;auB{7)(bae0hQQ>@|Ac5mPv{IC|}_{ujc?h z54)uB^?+XizJgN|C5~c+qHyjs2zfsTRM_(z40saXaFF$o3 zg@7(u1Q;bp14hfSp!Wjej-f0@xC0=pt{e}TA?fQcnSe_4lcfmv2UOx*ISJtb3`ff; zh#AFjoScgAL`m=DEd^9KIh%p-3_#q`lb0Y|4T!rT@-l>jfM_>a0eCgef0S4(D*=~C zKj2b12XKW90A4Sz1l%TT03Vh?!0nR0BJ-#WA-sd(W3mz9$K_RkJ8{yc#4dR?;1f7O zQ{qXSk16pKPQR3RS}p^82CqI)Vz*oYxJRx8d=_V0O6M_6swG%K`Jpp(o-g&6RS?U?U{%Q~4 zxoR)q0JR@*uzDVFh&li`R2>A&S1$t&Q?CGyP_F_Osn-BUsY8%(G$1rty@~KxKqbbh z!+?|3JAhNwdw`dyKLcK_jsnh69|B&X{sK5peFWH`J_cNhFNJsqX>rRQ~|HOZ^0RulgDA4@ye(j&cF+Rvy6pDjM(woGsu!n(7Gn zs)_?VtZ;B3-c_9ekEt$zAE{)(uT=`*NtFutqe=(-S!K%JV!m`?hF-KsjGL z3Cbq%0#cjAi=b>0FCkZx_-{})i9dm|N&F8eo5bs&TquqqW}$c=lnccXP%ac7fO4UD z7aSIfV zc@qXh>%*#}BI@dnD9#S5OR0r!FOX1u#?G2pYF zCcqa#d9!#4lsAk22IX4u0eWGrcpsE&#Su`h74M=)){0}GTq}-)a;-Q4%Jt%}o*4If zaT1j4#kZhbFTV41M9dGMTrYkE<$Cc?P4 z`*yA9dUw|+y1vl0C}moTFQq1BLCPa3Po!Mb&DZV9ZZCBEshcNtRBB1;)YKiRNokAH zmZ#m2_S>}0X?xP%N&9P>Oz)RIBzK!w%&22AS5Jm- zUk>j*gw;X={u)IpMsON@@eHimGBHN8F#57Ed-uXP>x~iA8)Kt4w4QF4oC{4IfR_>t z63gHNEC;`9X+ID=SK#k@{H?^_4OkVd!rzTp6|BaJ;3ljWZpPoQv1V9vN`4s#s zA-XHgKgax@ty19^;ltww?`wYhoA~Z7{dV^p^LvK*J=6RSa5eX!{DaKzVDmfF{0?*J z^3FHE7nt8d{8GOZx^CnA9yiGepB%sA#oX8lVs-3z{@Z}x&A@lzcUPc?UFO{)3DM1}d8ZQndAy3jlIV1UO)tKxDf4|7-x&~k5EL2%>2j!P3 zSE-KO4$6dXSE)4oW_LRqzftaAr#_?h*3q-0r>c2j%AOSE&cPAC$Yg zpRM-e_ucLvxqifNLiR_ljO>H*O#Jr4?_m6n!tYBtSE)C1$lD^T?1rYt;J*&QJBp!v z|Ede_H6`IM8Gl{zmx6E2b;DmO{?hQ*9WWcTIr!s$1rvf*jn)3)VnU#@J{StlZpbU6 zPaX&8yX;eI0}V}i#nu;*=>x`9)%aw%BVvNTW|qJHG;@z$(BQA7@41Wcx09I}eLA_l zxS9PU3LELyp9&u73;D$;|7;&V2JaNcO8=!auxy<(Sl><*72S@Mp|T)8H{aBruvSuW zvH9GxQ#6x}zB*q$-(U3$B*pZx=U>Qriex)SxW!N}J2qI43Kcch*W>HXb|iXYGQP^} z58*rV;mF!KW%a=YO^zsH)J9@NjtMOI<*KyP5cp6rK1n?X?5!_27e{;|+YxW6nN<(c z5?jn*eGz>Edn|p|*@tgehx1L~k9C*M_t)14s{G+5!1s|S`+e2Aa^>~D+E5+7v|Zc4 z5e~jWGl&$cxOR3>M0SnU0H^4X*3ovwN6(&3-_@QUt_%9XQe8`lM&WDK&=X=(6#hW> z6nuG`KGbcr$y8pGjrTW+))7U)8mc3ApZTmgT7fI9D~WH$Tdiy**!4#JBAc?zSMRIw zgU;VBat&9lEKujK4%GTBnrVUhhDKktMr|>uCvBvih8gFp zt*Z9dTg<4|R(OK1);9;D6yiJTO%sFMNCAJy{xmx3N-~0}HHfW`rjMe=wqi{Q;cTsn z6vaip>S_}Sp7cFXkBw>vM3CNV5_T}A|u;tfe4Bse04rpV>d=bnuYM- z&@;hAXowZfmDF{d5|~r#L!~0qh!}&g@?XRKbecmwz64+2 z5ZM423lWi}{4sXXI+_{iZgKME8kYO!wBI~!C~essU07H@r?G~OG7OB?OUzFJ%)HQ3 zF}1D=>NL9APb49ePCec37%}O#np;Li(6rN7k174%ov7gqaQk2wiMA%QuCbxLDzzqT zqvq`s7_D!eSlZZdigKv+BSx;XCn83V-4N|rmQy$xmL+a4i)C@l=x>jtwJG>zn(E*z zbkc0H?&$V${%W$XWW58hb+%Oxs~JymAy8n3t#70$;i5ppT;pBT!zhMYO%=r@fl$~w zx9$;*V=~YI-4k}CV}@um=aTXJrK(v>^e;JXkuml(-D) z1Yq3Oa#3!pM!8)Ln)urBhV=|LvN2Fy<*z?i6q}HlOKL)u!TRdJEHR}i)Zni%^Pw#APajar=S$YRvt1hY?q21YS60Nr}?TI{X}TQ z$_rbbP#)`5pi&f%o`-oDuD<0i(1;ja3$s-3n^o-xX31h}sG0k@c$4Vh?98pXHyB2? z28#*s-2;`rP=h^Cc(sA5H2B~o)Q8s!th$(VgVknu2-0OpMIwqkQhvcz^i@@{)$~IhR=bNmez#i91xYcRH#Dxn5nZG`trwK1t$5sZIF{!_c$s2t>J-9n*u zmomb43d(jkkh4=-UsUfW$Hy8K)Q@n0D9t&pX3^-eYE3%d#61^+Y+)=MDzJmYudJvT z>8rdFV`WUhUtJ~2=hg=s=gegSvVH9chAGQIBqsW=vRe6+85}eudSP{SyL@exulI{F zjkT3C&lN>;{gqeRdI!_Y?O_#Yw?WwX)C3WI7fz(kvh$!zsezn0rBl}OpdHIJt>c(a z#QMr^Z`;pj*OQ|QY-YjwHVt0Tig#OrwjA5gwBjM!W+8R7#Xy5tBS{qbYVG(4wIb7E zO$WMBSt;NQg&KHtPp!jBwKjsQG1_hHTHffIKm%J7W4J{FTGqw7n z*{BoEN=Iv|WlSRLDjIzC=p9Wm&KH^sua4}l)mg^EhMYZYO_sX0wv+1gZeiQn%YhbQ zH`j2rBu86YDGsO8D#l7O#f`=i34!Fhf}BvInWMIjyDWP1=!p1)i+`MaNAb; z>tM~<$$*U>6&&lZ9?ov2PH|S#TH9Fl!o~ovbu3)dqdp6obc5$r^0dK&w%rl#P$be> zs*+=tHKUtStRnP2nuS5|$cXT0r%uiO5z99;^<6 z_La*)z!J4n#fiaMo2eg@8#O&t*K|z{3sN4mR3W^qVg=C2w(lPjL9^RZ6og|#jb-@g zYHNfmURqZa#HLJj&{u_Ohf3=zfx_`DF-|UQ9Sy+}oz5#GCg#T1nL{=ONBU48Wf>V< zz`s*#X9X8vK7wmuy2;{ro~l;PMu%)EwNH7F zt3?%J3YukX#IlX8J=F>RP{=n2^DwOzC`emuv<$FT541aCrRWWiux*Ukd=jG<_$wP5 z{Aj!|g~Q?-VQqq~is=Ft|bAV+nX&chmW-GZkG%?tqE1{#bi6Qf?an@uSV7$0y zop2;jYqjFZ894q_nb?tL$;hI!rU&aPEcaRjUUvU$w*JwOUwc)E{9Kb(|v) zPrGoboKdr|1mrSE>QnW+U3>Ms;*Hx!jZ+ZVh&{V!s< zuN^AH_#9}DBhI-K!Zr;m!N0~d5sFniZK+${1#z&302GBst-UpGC4__(ViG;4iyA&N z6S@~sK_52heC05KwU&QH2UKH%^}6z+&iI2N;jgJ{XtJ$3ddv<(3GHw(?f$_?EcDw^ z#vd_^L@hZHRY5=5xN*Mu{&se|d2f;`$vVb6rtDMw%RI%A3vtpbvyUA@l?c_>ld5OK{^If7;G0t()QxA_f%*o`64INlm_*p^(Z)Xz!YPL% zIK?*`%c2I#!VLp|l@|f5F&2WV*ZZrmd)Ppmlf|`F{squkuC?7JoSO!)FMuv9s`mS^ zF-DZ7v+*0kK@i+!ngPvEVS^t0aQd|qZBRbro&r-W3hV2AO^~&&$@tAv$N&X{Rz^ax z-&70QD(u18e2PP19(I=EP$W4?ChGWZ0ZWd(GjmnKZ0c9pH52uuWHuTSmW^bUF-Jz! z70$B}d*|Dc?&P5lnv7M}jNrJjDAfI?A&sfFO#l{*yx4P|YL*0M`)P06I*l!l&<@xO z=jmy=6G57BvqZTS2p0^kU`vA?4l@l|DCR(l0jtW!YUqTig+)eJ90Jf6+nd)m_M$*_ zwON1&XSmKfrZ%U^);h>OLZc3$!!)ac^*eWx#^7HrSviPHRuJ6@?k96C2SjdPx>ZKndY43@>pbsoHjSyRwsg;RT}2 zF_Mi*N0IHtm)7}fjqA_J&hdbzozhrWN0%Zj4>V$7+D_9`%`7()cXU`;ur@Y3GQZf- zVXA-G$-hKucW{`<>c{pw*QRT?W5cQKbgG?r$_}+DPTiR{Njn|cI*mH9Rh+W}PuY34 zYP37VB08n<$(OBjNFdsTXg`1t!LZnF?ftcP*x2^!oqZsd*XG_x9*y^~fBC=X z7v>e@)Ax|5=PN1NBlTOVY3=xEchlPQ!R*g#zQ|abw8*ERriz$m;4knX!r{H3zggjP zI6j-QMh2Z41!$+lj0-Cs{sf=6=9Od4#DVG@%mFw(tb?VctA-)W?{jEwHLhB*S+9_Z zHtt(_P?OLMWA@3%)CX&HEyx?PVoBL(la{VLvNcDVZSX>(+zwNwLYy60gUDLGoa#KE zJ)riF`r%H~v1jB?%N+DKieN9>`lUE+U~Of0_5-)EPS+j75y%|w>xk5d6yl8to3WKw zbJAL2Xsjhj1UV2VDbO$(-`~?)LT~`I$h;UgLFXcbRvY09DdaEEnFOl|90g2>d=-Lo z8~aRM#^*VXz8Djzh8j_dBN8$>W>9K_JIpZsX5qpvG?sd_ zQ4TK^OCsnVo=vE$56<$JntfKbZC2eP^s9!Ajo$L8VY6y2KXLZ~JoKqvB_F%Yu~dbY z;HG8$G(hMy-{AGU<}pZJV|`r^i{n6bSlmXw&mG|Ul-5pZpbZt>SKNj;X5br+h68(j za)4KItrJLvBS)l+}hb~#={y- zR6WPJDsH_-9IMuFYgh+v77x3ZSP)HvlS;azY8nnZQ z8c*;9aJicYi&Y=4gtZ(q$5L!{gLPB1kqD9T36Du`Z*A$xKJexcED&v$(=i0^1Pctv z`oJt4Lm>seN%)Fdxbt{|gQl3#>M%~$zEpXjp*lR9*!x$|^2+)E@1lgIDk_;m8y?jG zoLo9$gEi9vp#b*O!f_UN46iE8Y;6;Gv7E&J_f@6ddH1vO9ITUvjcM)_5OaixNve^6OZz?Nx05g<*)J8U)eUv zEOpu@OoI$im9`0(x&3VtC;A()60WvZ(V-Gw?VLtf+i-T%Dx(5E?B>DlRN`)de^%q1 zIkbftCev}yNo?~&8(L`^wKchDwyNm}Her+f)xHHBao-c5AI+_k*h$sv(5N-EP@<&u{2*M8NC1l3l@(N%Nyk}LM|!XNNgiIDC`tcBy0PXc7Sa| zW3Q65YlnunlQ7bZ&*fOs4X>hcWz;$Bf!LRmo#)*JmPNL&A?Im^bsAnU{M?EP z%!2fU*Xi(wQ}8eNI|olY0y_@eu?vBw!^Q(aL+Ti1dG;t9-oK&(z7+1w77VYhsNknQ zeATc=ID;szva&jx#aW6|pn~B8D=Hf12GGdbRUAI3qM|?8)>KsB@*~ahFiOJ*S5#b8 z@2eXS4i0Ru6r(qG9!Xc&u3PqqGfef=OjE1K-O1xPP-h}F~Nb;Rf$_$s@- zM#AAkrZLsNInEsfGZ?1S`77bExI(uQX^Xe*{cT2j%15*Ys18b%1_DT5S1;|*a` zcwEuI8?2qi(;MMKSTOit@Zrsdgng&eZW6t9)C#o<=V=b2VR`OfU^AlQF}*OfR!1zP z--?A{anuY*xMtvGwp0*8EyK0fhh+w5npQG#oY~o9xi}(H0*<2M!MfDCYY0>`w_^%U zdGqt%G8d=kV%ctmWlXGfI9ssxOiMdD-rj)uKUe%5$FyBAd;l2==nL(Gnr#Xl86h}# zfw2W4V+;cHizinsuaK@M(I6|R(E&<^X<)L`whRB~s%aSqR%qk6LPUqW>||l16`L#8 zVASKISU(6HsI*2z`!nAJoX*nfZ#1<49%ySqQQG&!G{*;aL(2jA43_Zlo_$iZN+kPPxjoLa@cNEkK zyV}T1yAdR6IGTFG7Q`q&PG{?BH^ExjVSo=fS2sFfWkvBoGX=7)bJLUD_Mox(3A#kh z7pN-=$?L=&Vcy|0oo1|m3ASddtu|xpO^+)xTVOUb+`5Q-cG!`nRf;I_&BFa<-Tqb> zCD;48EPbQP9u*_2gV>ZTsUi&{otuvb$yozg0jD$|8L0$yEk`!t(MlcTGf}45O@$m| z+^S+#Ev=%V%-8^fGQ$(E!7Z%WT9P8V@1Ui?{jyeaO~779m<+=dNsqa)`Ky%yb)`=uXts3~=VM!H@I8a%%k+u#v;=)1P*(veW%&PM7 zA`Vwbu*-~1neg+kq~n?|?>A~IG61zBRfe@O0kSI`L%PlZn`WRDGsp^@X9WgZfgu=R zmAp-6?T$^Ugxh5K!&YKmnZLd!V9pY)$Z(u(3v6z*GDW2V;Uf$@S4CG4b>EuPTkEux zRkRicB-|6ArrQ>!a75V$38(0ZFTDR4P9ZkB$=JWuTrrD!HU@T8QY20 zM|758(BsftjB^@1rFwRZhp_}Up`-vdiiyqX2uw|?W*8IPleXKY#&YS+WDIH5I2 zcyTf)0>gfRwNx1#4q^eWcauW2I3;21)u!XjM7KhSgu_xi&@h`yu8i<;up_`e4lTRF zBFqk#M9XSRfc`XRG_-yy9aGtCY_ecJ=G*;Pc7-qIQ$OSBRN7$@1@z<@%!oGNd^}0X z15R&+Fp!FNWQC6D!(e>|O*=F8P~!!QjiH73SkxJTaYhHECBCMhbC+D>d;`#?*3Jc{ zl<=svqs*wqC@z4xcix=W3f^99`?Pp!@^tpT2BF&FZ3NvMdWM_>t)GguPknV0tfaP9 zY%ANC-l427cKwKmq=llPh1*0AX7fv0MkQzuaZI2-gnN;&!t~l9Q9vnd$=f~!K%8fZ zE9ciS_wfFk88CWK&`w>%C@~|%p^*c_T8QzX7fG!y>=Vl&Aj6_SvxO#_faAJ7F96U4 z*z)6h{(QTiBYojWDjy@p(t8XUhbWk7`LaIU*F?|rd0IjH4+)S+7(l17O2P)Qwddm8 z<1mwR9<`8_9-bVmWg6}IwBGbNjWQiu8UJaS)brL_g&1M$0v=eQtxY;S>hqiomX1HKr>9Ink znWX^-Bc8+}1d-Qax->L$^qu|J~)V^JPN+ zp*sKXilmmaG{e{tKJ4ajrFDEm^E~bW6w7j2VLeUY z(GjB3qaO39emDwkhY1MJ*9XbqoHr0PrtK%Hrdhh$2BoB^coZ(thc6c6@IXIRp`8pq zmcWz1wN)YVf|y5%zjh9S$P+RTR)%Od#i}h8Lt^tq30ia1H-z&Rhj4R%xzNr11~}lN zfL|?Qd>ZO@ba6z-nPX$kRK_aJm*oP zO~&~(KRq@YM~v-w5JUgX=|XGXaK0pJk0JJdeg7dRi;Jaf>~hihJH6VF4;^if3S+{4 z^Z;#$j$t1dda9|NgwT3jclOEXSqOdC|NpN2weGO!qvZcrCb)H}dJO2(ssg^#)?{Wo z%Q(^TO?a_#+CIanEfQ}7o6EGe1;N`sBi@lWJkRQEXQyBf!OV+rpu^JAS}iQ%Q1d*C z&5<9_X*UvD&qvYrJW}Py7Ajs=q_13HRA7M&LyO0as~i)zb&7;{8BE1B!N^4LH1@^j zT2mLS#l9$A@4%IC90mvLN7e_g;-l}d`D>K`LxJ-->K|TC>$8bgvk#VwSYkWxHS5kZ zT3&DM?pSKy)*zsFA#mI0Pqn?lI|K0~nVE&~cBp4!SLi!BD3nOF>s-JLv@w3b3U zIPH`L$NjXn{r@9B$Ej}C{n-Ckqpkh2sZVX~rWI7BX<>GKY5rYDoPWrZbdy5ap;qJfhE45!otA38!Xy?X= zL6_!fUjXy4<(o|Q~v8q zPv*S4(f%E9YOd3oeaK1}ErUD*&ixMudn60$086J&b0kGFuri0eyZ*G=Wv|7dOjZ;< zJ?-!W&;11t-#Gwn1MGN#Cfy3rZ{f_Vw?h05?z4RYZzsTaq#E!S#22P~c!PW~esP5u z-YND`3YFUT4#f1U45`^ErRL5UI0T#gx-^YT}U`=Ak(RQG)0mjj#VK(Zz19+-$++;6TtAv(`y`D?bK zdID$*(YX%tQTtZ2oEQboJ0@_4P)FikH-=aP1fkBOp+>`ys!iP!R*bw;Hp*yjTv9IF zG6%O>8&wW+l`Ely z)Ugftk3Ls7i`ByqicyTuNA6l+Wls9;PPGnqjinAE*~xt(WFVPD9KjltK!!_nCdo)P zim4_k(n*CQrLYH~t2a6Q0@jA2FdjtY6RcfuyVU>RMfAGCW!u zZ9cQ{Q9mPHmpX)WsvQ?&wV3EkN*qFIKKxQWMGnPWfsob->e&gvtomVqbtDQs+(h%r z|JzEXtqW-~Jwc@HPaeK`LaG`>r`8*_72`=It*+84S%@y6%2_H-6|q!^#xPzfjfzED zN>U>+wLM;^Ghh88*W&+_D=vSd$-`YPO55YqTFFS3DQKZtXcau{gqFagA{h2<2Zb2c zmR}L8L@l>c5n9j>TwCH+3Ny65yredyR9d|zLW*kqHyVGWN_tKbMQw9hlvH1>%9dTk z%?ijuT%4*YMz`fbx-kzW23TsRT@UkW)t-afa12#W|8Ofr>a~`K`j+NU@>-~^ptr-qIjp*#w$7(oZQt4x5w1%yJLlr> za{OJ5zn=J8gg<=h#&r(L3ry(X z@C4M_Gl}#qil7aaxrJfEzk=&OEA4&fJs1Awr`Z|3ul4s3-u}-FnfAbW69;)8TX^ZT z)PYAk4jGLB@_Ds9R&1A{7#UG&Bx5|3$AP-T~UcsJ=szwPVJEG227k9 zpEv`Nm${=7Tc$@*3jHV~#e1_|^piNFL$)iiWqINZAZ}2^gT9=Zl!K*;W@>QhDU>%` zunbeZJxw4QLP3hDF~XJDhgqPI#OaAXW^h?Fkmlw@pF3M5PIdPL=-NrTv+!-F#Ochb zMgL6g)JeJ`qlG6UacV{@vIOCdh)rQ`C?bMcW=3ab7mm-&NMU~A7+nugGRJUyW=5h= znTb;)7$yssrq?h&Inl4;(O4p}AAun;)Rg7a+=P}>MX3c<;?&q|#d#J{A~kdwDh2jv z>j5Q)tzp(XL|sLsu+-Nz+9d36*3HR$V!%1mrtqoTZV*-<2X4gTw^ywpNX(6jh> z5Oi+7C0almn>Tp9`ZsYZDGq}BF!Pq_BrZy6nI2;XO3QRKNv0V~nZ&XAfkYq1 zp5PD=Fh>bqZf68QLR~?_K3jV6<3?Neb$bD#ghW#YxWNL6%@4(+un97`bMp?Clhvv( z!zOA=i0;W2VCm^eFpgTXML~x#Zu>g=6P zEi`dr^Jj_8ClZ_Ab%c+2AWufOglulGuD$t1hSyac{iKnu27L@GcUlrjUTs zPcnRu;mgn+6qJ!^^VoFs z)>jl8(~ro%;&h94I*W&FiPMp+DW`i4;dCC^QxnTc30q2NZpnzJO2=m)81JR%<~8Og z-rWth)?2hAV0I)bNV6@_UG z1!iJmXmuy};yq39geNvuvSB}j-R z%|Qz1V18|Tid8FCsVfTBUEFttx-VC8 z-@e~_CIM{i|K9t3|33Hmo=XBV=bSln<~{Fu_q;PBlvEubO;((UE@>D54bZTR3r@1_ z6H>?8GdRpM7lCjF28$3_EV3|2JZ%vKg+cpk&-3B{O~64VE9)`{d3$)`-6O|JC^0Xb z3BiB^@3GMdnY?>XTb&Tg2+RqY@Ow{NozO%kfI&tADo5o+XXVgYgJ}~;8wtO1Iao#k zIzW=MURS8=ayi+0+8l7cQhSA6U%MQ2RM^6qQKwh5q+kK!00392QZTmQiv}yMueqSY z5;W3WRF!$osuWhb3_=?leimDrSwJ2EY6&_MDZs%fDnwF&P?-v0MJg**>0t@Bfem1# zjI@F#GPe?nRJ3^3B7!iNN1$O>NT)z`F(CrWheW^54u4Epknsb(f-P?d8B8S@7)+kP z(2??LStjKbFe7%T0J0pkM^#SDFw))u$_OD${4#-Pt&7!W;bo-)u~vY0gMzV%#Zm7O z-d=;3IpUqBLcz9o8Mj5>44LLUrp27AGyIBFC8A&AcBoYYqT4JwFfYz|`m()kZSC%F zYrD}}^P|OSpTb82T!wgLI^5H&|FOU_OX^ks{KQ|9ifg=&o?UXWX=#Z6te^ntom(xZ zG_Y;`WAXDvlan%wUVaf)mKihnro)P$tL4KRH&K3(yFaeU^ZhbO-y8{M?xcXptx)Px z6)G$Pq>e%?g#^Gx=`OOtOVoiIYu!YdfQ)=_ASlmTmu3dLSg4G4#!H9IL4xTDDVRp5 zQ1*obfWs1;t(!ufuq@F|BI=~gr&evg7-f!z=cwdIB|j!5c#p$IK+SHZQV|Aog93F@ z_Qeu{45G}?EshGJ8nBs2K{_+<0o;gFU@RFA!#7|W*LaxPodqJ$i4c7n;WWBNB=7L( zU^xp^HUbjU*19D^8-a}NF(7!vMo?dB?8j6xIU3}szyQ}psho^mL0)7^I-xIbuMye6 z`k~QikIoIGW`+?eyaEt!s*hNH(yz9a zh@U^xXoLltKbyHwYEBpg1b@O2;YAJaa`cLGK(xFgz0CN;sba#(iA|Gth=8Ol*03Z)xALpnnR_~>vn7Rgy)E`^&% z&CUYMnD~{9Di9`*Ru41+;i-mdDqo#ws7|aaHG}Dxs+>qDXT~VMOXYVHu>dj{)R2!V zI2t5Wa~Qy6?V-h5mn)WvL^2bp5H1l~Qqe-BNsbVcE84l{Y$2fe2r}@-Hd8W^VWP4n zp=Lrk?V0A<0kyu3IRWfKJJ_%jF)TZ|fN8qD=u==o-Cll16AUw&P+?Y20NfJ@PZLPz z7os*4;#@g_4SSwwnuHgGT_IcoC<-TY%-P_UK|=tARyIP?1~vlP1F=8`4|^f8oyy5U zDka1-PcEVIWD<46e)VxCL)lR#+S6cYS?f;n;1X{Ux+7~y#YWVFJ5)}#Qi;Lkq@fL+ zASj6H@TVX}e+4d}weAMMA~aat{}he8-LiE_Sf{D@vOcQZY`$5by+1 zAWL=_kZDH)CBoLR*8M{!g*}A}&%iL)DzKdBktP+074!l6P$R7c#*0*79&9fmYF3z- z!`>u1&^=cXMAo|33>e*OD=B$hbU?-sDI>W?ZWD=Cva`@1jH8ed#sM|RiHDxSI8K2n z<5CbTdLfO-!w&cgRq#cj<@FM}oZgHUN)Nn(PT1r<(9<}5JzGXfLE2r)4A zW=*BG3gtM%g_PRWKobU~5siNUA79iwu#xeTA+5TakqGG66zYQTM6&lja31Ku4(TovYrsdx)Q(!~?G!K+^eUy^Q3dG3rTi; zBe+cDSm6LF=D;H`NdNq-G%`}A^x^CNx|*Is?G(c=!N!|-s@~b-X>9z=ojvYq5N;+@EQt9k^+y(iEJ9FiIY+v1aA;r zL(Zq}I&20g9|%Ook@`-Sh$xXdQ0hCuRAj=3DQbusiqe3OXk=b0m69%G?U1T68S8w9 z7{!h@6KH5BCkO+B{$Wq zaYAJnsMSc8tc5o#!YqMNy$g{u5irdx(Hu?Vc##B6T{Xr+mJRd3NXm!|(ne%f5rlz? z#GF*{V<1`B>S>;fJ72PbsAdwX{D<-`vs%(ljJ`pGI+=8Nw06NroszsGE(QFK3S+J|}16mr4K)%Kt4g!E-V=ooRr=S*gy!-}I9f?jZ7Ok@h^i@S0n%~VnmAT=4I%5kuki72&&7@|JW={T$$ zw3d^(;W(n8%vhezH-LBDzi%8)%TGXvn$8u4f!T1hVjiD=O)NsT=t?1JL ztm#2owopc~IuD{)e${9Mp4?EdfVW`iCUdM}Wa#o>P*)f!j7^IPpJcV{q7WQZH!A=Z z6bK@12`}??&;bXS4uEJPK4L*Q1Li1<222w*@PRopj|{~kn&(Nl7DNYVV=n!98d^^T zfYs5SH#h{^^M;0_H4Q!iLU?Sl5I09@s$?uOAM^x`dW1!;Pq4AXOqj9e%LZAhM?eK? zE{(yapCPo?rvqNTV9E)FAUAST2Cy@y!!k#d;UxYPyuYI@l0Z@_`?BSXAqmr0shvV@ z7c0h~ME;#ZVI~xa*|TGfj*YfdfiBuo@Hm@uDQptB{E-Nd0V_Aywu~XSj6t}>41!sy zhgM$#WJA&~A(1IzRt=dY2s>C}MYUxri3)BYLqG7QTL4oJkpiNw0t5_TXYnO|b#!vW z>geQ_;8q<;6cW;MTm#hwbo3#O0`?>Q^bq)9sFd@oplb(N#Hvceo;=V|Z4$5qH=Fo;EPWueK){-ao!;cPdf^XFDaYDS|gb#929QNhE2FP&SJ ztNI!y<7=FZFPn_7VKTn#;+xWuO|Tz%WB|M}aMo zPEISPlN%x6J0fIfm?W$+OqxP?QpDrfXsEDjI{0?eaW|rL zn29oUg>J(UgV2jJVqMKIBah8`JhrsYvBIH3g{76qNShR4BX_4rsY{`;vcW$T21iK2 zvXX+)i(w;$Eun;YllmOi6%>!3B58aDhBx!g99cXqJx zpdmX~YA`%uxdArJ`UXL&eUF*~js>0v06-(qa>{2w)11AdCU{|$Y zxv^h4ymnAO1z+gPuT~`H0`r8gkhP%8V`LRT?CnTimKjFk|2 zp&yMQxwVB@4@;?-R)vfi{Ei3CwbrK7R(HczDn%L1_~DN{d-#z{SO?y#XYM^LRyyAf z9kesZeU}131TMv!Xidr2zz+BzV+oEYg1)>5ir6M5VrWH0!~9rAb8v$H%0tE>-ap2m zOv@R_TjndZ1+@ROBTOE#o+A5md6B~Z+71q&;IfXHHTp0DP+vyC>m4fzWe+2iJv{F@ z`U(YJ|K=S(0)f9!;9E6$Sv`t>frUCgDOrsNA*?*=&SMdmQy3nK6J=vh2oaQ-l z@IYKw{VNYIih?#&R#WNEAFfJ2{wQAKlN^YbbK*uuJfR!!tB;HG9E``@(C1@)fw~_&iP)53^?|oA*rS6ClD1OMx`{|j>v|i3`WY+ zi$~@jed^HGl;1}w)Rp;pYGjjA4kD!@52^yU z8Y$WdxZ)tea5jYyfqexGl#o0EiP075$msFsEMhf-7|)|;`HfXEG99xLR?MI76u?u= zfj!E1uZp)nkNLlu?k*7c3XuL(0Y^{3fp^ve3d((@k2g}{IsE$~*WZ_w1;|itf^#Y{ zPl?!gskG&#y~X&sxeTFfocp?W1t!X z)flM8z<&h>@`M68CK}e}zhbu4ldQ%-H3q6NP>q3V3{+#F8UxiBsK!7w2C6Yoje%+m z{8wVYuQsMF5(zkcZ8uZ1##4i*zO)odMOpgVj%czI356O9&dgNOL}4PTB@u8#P0gE_ z3dKTwbCFP-)tigre5$n6;Od(Q1zGBq&RQoyEB5Wi9vMXs8lnf�lEamvgByrr36o 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 + + + Microsoft.Practices.Unity.Interception + + + + + Stores information about a single to be an additional interface for an intercepted object and + configures a container accordingly. + + + + + Stores information about a an intercepted object and configures a container accordingly. + + + + + Initializes a new instance of the with a + . + + A descriptor representing the interception behavior to use. + when is + . + when is not an interface. + + + + + Add policies to the to configure the container to use the represented + as an additional interface for the supplied parameters. + + Interface being registered. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + Stores information about a single to be an additional interface for an intercepted object and + configures a container accordingly. + + The interface. + + + + Initializes a new instance of the . + + + + + An injection member that lets you specify behaviors that should + apply to all instances of a type in the container regardless + of what name it's resolved under. + + + + + Base class for injection members that allow you to add + interception behaviors. + + + + + Initializes a new instance of the with a + . + + The interception behavior to use. + + + + Initializes a new instance of the with a + given type/name pair. + + Type of behavior to + + + + + Initializes a new instance of the with a + given behavior type. + + Type of behavior to + + + + Add policies to the to configure the container to use the represented + for the supplied parameters. + + Interface being registered. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + Get the list of behaviors for the current type so that it can be added to. + + Policy list. + Implementation type to set behaviors for. + Name type is registered under. + An instance of . + + + + Create a new that will + supply the given interception behavior to the container. + + Behavior to apply to this type. + + + + Create a new that will + resolve the given type/name pair to get the behavior. + + Type of behavior. + Name for behavior registration. + + + + Create a new that will + resolve the given type to get the behavior. + + Type of behavior. + + + + Get the list of behaviors for the current type so that it can be added to. + + Policy list. + Implementation type to set behaviors for. + Name type is registered under. + An instance of . + + + + A generic version of so you + can give the behavior type using generic syntax. + + Type of the behavior object to apply. + + + + Construct a new instance + that use the given type and name to resolve the behavior object. + + Name of the registration. + + + + Construct a new instance + that uses the given type to resolve the behavior object. + + + + + A that can be passed to the + method to specify + which interceptor to use. This member sets up the default + interceptor for a type - this will be used regardless of which + name is used to resolve the type. + + + + + Construt a new instance that, + when applied to a container, will register the given + interceptor as the default one. + + Interceptor to use. + + + + Construct a new that, when + applied to a container, will register the given type as + the default interceptor. + + Type of interceptor. + Name to use to resolve the interceptor. + + + + Construct a new that, when + applied to a container, will register the given type as + the default interceptor. + + Type of interceptor. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Type of interface being registered. If no interface, + this will be null. + Type of concrete type being registered. + Name used to resolve the type object. + Policy list to add policies to. + + + + A generic version of so that + you can specify the interceptor type using generics. + + + + + + Create a new instance of . + + Name to use when resolving interceptor. + + + + Create a new instance of . + + + + + An that accumulates a sequence of + instances representing the additional interfaces for an intercepted object. + + + + + An that returns a sequence of + instances representing the additional interfaces for an intercepted object. + + + + + Gets the instances accumulated by this policy. + + + + + Initializes a new instance of the class. + + + + + Gets the instances accumulated by this policy. + + + + + An implementation of that will + resolve the interceptor through the container. + + + + + An interface that determines when to intercept instances + and which interceptor to use. + + + + + Interceptor to use. + + Context for current build operation. + + + + Construct a new that + will resolve the interceptor using the given build key. + + build key to resolve. + + + + Interceptor to use. + + Context for current build operation. + + + + An implementation of that will + resolve the interceptor through the container. + + + + + Interface that controls when and how types get intercepted. + + + + + Interceptor to use to create type proxy + + Context for current build operation. + + + + Cache for proxied type. + + + + + construct a new that + will resolve the interceptor with the given . + + The build key to use to resolve. + + + + Interceptor to use to create type proxy + + Context for current build operation. + + + + Cache for proxied type. + + + + + High-level API for performing interception on existing and new objects. + + + + + Returns a for type which wraps + the supplied . + + The type to intercept. + The instance to intercept. + The to use when creating the proxy. + The interception behaviors for the new proxy. + Any additional interfaces the proxy must implement. + A proxy for compatible with . + when is . + when is . + when is . + when is . + when cannot intercept + . + + + + Returns a for type which wraps + the supplied . + + Type to intercept. + The instance to intercept. + The to use when creating the proxy. + The interception behaviors for the new proxy. + A proxy for compatible with . + when is . + when is . + when is . + when cannot intercept + . + + + + Returns a for type which wraps + the supplied . + + The type to intercept. + The instance to intercept. + The to use when creating the proxy. + The interception behaviors for the new proxy. + Any additional interfaces the proxy must implement. + A proxy for compatible with . + when is . + when is . + when is . + when is . + when is . + when cannot intercept + . + + + + Returns a for type which wraps + the supplied . + + The type to intercept. + The instance to intercept. + The to use when creating the proxy. + The interception behaviors for the new proxy. + A proxy for compatible with . + when is . + when is . + when is . + when is . + when cannot intercept + . + + + + Creates a new instance of type that is intercepted with the behaviors in + . + + The type of the object to create. + The to use when creating the proxy. + The interception behaviors for the new proxy. + Any additional interfaces the proxy must implement. + The arguments for the creation of the new instance. + An instance of a class compatible with that includes execution of the + given . + when is . + when is . + When is . + when cannot intercept + . + + + + Creates a new instance of type that is intercepted with the behaviors in + . + + The type of the object to create. + The to use when creating the proxy. + The interception behaviors for the new proxy. + The arguments for the creation of the new instance. + An instance of a class compatible with that includes execution of the + given . + when is . + when is . + when cannot intercept + . + + + + Creates a new instance of type that is intercepted with the behaviors in + . + + The type of the object to create. + The to use when creating the proxy. + The interception behaviors for the new proxy. + Any additional interfaces the instance must implement. + The arguments for the creation of the new instance. + An instance of a class compatible with that includes execution of the + given . + when is . + when is . + when is . + when is . + when cannot intercept + . + + + + Creates a new instance of type that is intercepted with the behaviors in + . + + The type of the object to create. + The to use when creating the proxy. + The interception behaviors for the new proxy. + The arguments for the creation of the new instance. + An instance of a class compatible with that includes execution of the + given . + when is . + when is . + when is . + when cannot intercept + . + + + + Computes the array with all the additional interfaces for the interception of an object. + + The interception behaviors for the new proxy. + Any additional interfaces the instance must implement. + An array with the required interfaces for + when the interfaces are not valid. + + + + Stores information about the to be used to intercept an object and + configures a container accordingly. + + + + + + Initializes a new instance of the class with an interceptor instance. + + The to use. + when is + . + + + + Initialize a new instance of the class with a given + name and type that will be resolved to provide interception. + + Type of the interceptor + name to use to resolve. + + + + Initialize a new instance of the class with + a given type that will be resolved to provide interception. + + Type of the interceptor. + + + + Add policies to the to configure the container to use the represented + for the supplied parameters. + + Interface being registered. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + Generic version of that lets you specify an interceptor + type using generic syntax. + + Type of interceptor + + + + Initialize an instance of that will + resolve the given interceptor type. + + + + + Initialize an instance of that will + resolve the given interceptor type and name. + + Name that will be used to resolve the interceptor. + + + + A simple data holder class used to store information about the current + interception operation that's being set up. Useful for creating behaviors + that need to know this stuff (especially the PIAB behavior). + + + + + Create a new instance of that + stores the given , + , and . + + that will be used to + create the intercepting type or proxy. + Type that interception was requested on. + Type of the object that will actually be intercepted. + + + + that will be used to + create the intercepting type or proxy. + + + + + Type that interception was requested on. + + + + + Type of the object that will actually be intercepted. + + + + + This interface is implemented by all proxy objects, type or instance based. + It allows for adding interception behaviors. + + + + + Adds a to the proxy. + + The to add. + + + + Base interface for type and instance based interceptor classes. + + + + + Can this interceptor generate a proxy for the given type? + + Type to check. + True if interception is possible, false if not. + + + + Returns a sequence of methods on the given type that can be + intercepted. + + Type that was specified when this interceptor + was created (typically an interface). + The concrete type of the implementing object. + Sequence of objects. + + + + Interface for interceptors that generate separate proxy + objects to implement interception on instances. + + + + + Create a proxy object that provides interception for . + + Type to generate the proxy of. + Object to create the proxy for. + Additional interfaces the proxy must implement. + The proxy object. + + + + Implementation of that returns a + pre-created interceptor. + + + + + Create a new instance of . + + Interceptor to store. + + + + Interceptor to use. + + Context for current build operation. + + + + A that intercepts objects + in the build chain by creating a proxy object. + + + + + Called during the chain of responsibility for a build operation. The + PostBuildUp method is called when the chain has finished the PreBuildUp + phase and executes in reverse order from the PreBuildUp calls. + + Context of the build operation. + + + + An instance interceptor that works by generating a + proxy class on the fly for a single interface. + + + + + Can this interceptor generate a proxy for the given type? + + Type to check. + True if interception is possible, false if not. + + + + Returns a sequence of methods on the given type that can be + intercepted. + + Type that was specified when this interceptor + was created (typically an interface). + The concrete type of the implementing object. + Sequence of objects. + + + + Create a proxy object that provides interception for . + + Type to generate the proxy of. + Object to create the proxy for. + Additional interfaces the proxy must implement. + The proxy object. + + + + A class used to generate proxy classes for doing interception on + interfaces. + + + + + Create an instance of that + can construct an intercepting proxy for the given interface. + + Type of the interface to intercept. + Additional interfaces the proxy must implement. + + + + Create the type to proxy the requested interface + + + + + + Represents the implementation of an interface method. + + + + + Used to throw an for non-implemented methods on the + additional interfaces. + + + + + This class provides the remoting-based interception mechanism. It is + invoked by a call on the corresponding TransparentProxy + object. It routes calls through the handlers as appropriate. + + + + + Creates a new instance that applies + the given policies to the given target object. + + Target object to intercept calls to. + Type to return as the type being proxied. + Additional interfaces the proxy must implement. + + + + Adds a to the proxy. + + The to add. + + + + Checks whether the proxy that represents the specified object type can be cast to the type represented by the interface. + + + + true if cast will succeed; otherwise, false. + + + The type to cast to. + The object for which to check casting. + The immediate caller makes the call through a reference to the interface and does not have infrastructure permission. + + + + Executes a method call represented by the + parameter. The CLR will call this method when a method is called + on the TransparentProxy. This method runs the invocation through + the call handler pipeline and finally sends it down to the + target object, and then back through the pipeline. + + An object that contains the information + about the method call. + An object contains the + information about the target method's return value. + + + + Returns the target of this intercepted call. + + The target object. + + + + Gets or sets the fully qualified type name of the server object in a . + + + + The fully qualified type name of the server object in a . + + + The immediate caller makes the call through a reference to the interface and does not have infrastructure permission. + + + + An instance interceptor that uses remoting proxies to do the + interception. + + + + + Can this interceptor generate a proxy for the given type? + + Type to check. + True if interception is possible, false if not. + + + + Returns a sequence of methods on the given type that can be + intercepted. + + The intercepted type. + The concrete type of the implementing object. + Sequence of objects. + + + + Create a proxy object that provides interception for . + + Type to generate the proxy of. + Object to create the proxy for. + Additional interfaces the proxy must implement. + The proxy object. + + + + A dumb data holder that returns the methodinfo for both an + interface method and the method that implements that interface + method. + + + + + Construct a new which holds + the given objects. + + MethodInfo for the interface method (may be null if no interface). + MethodInfo for implementing method. + + + + Determines whether the specified is equal to the current . + + + true if the specified is equal to the current ; otherwise, false. + + + The to compare with the current . + + + The parameter is null. + 2 + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + 2 + + + + Standard equals operator + + + + + standard not equal operator. + + + + + Returns a that represents the current . + + + A that represents the current . + + 2 + + + + The interface method MethodInfo. + + + + + The implementing method MethodInfo. + + + + + Interface for interceptor objects that generate + proxy types. + + + + + Create a type to proxy for the given type . + + Type to proxy. + Additional interfaces the proxy must implement. + New type that can be instantiated instead of the + original type t, and supports interception. + + + + Implementation of that returns a precreated + interceptor object. + + + + + Create a new instance of that + uses the given . + + Interceptor to use. + + + + Interceptor to use to create type proxy + + Context for current build operation. + + + + Cache for proxied type. + + + + + A that hooks up type interception. It looks for + a for the current build key, or the current + build type. If present, it substitutes types so that that proxy class gets + built up instead. On the way back, it hooks up the appropriate handlers. + + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + In this class, PreBuildUp is responsible for figuring out if the + class is proxiable, and if so, replacing it with a proxy class. + Context of the build operation. + + + + Called during the chain of responsibility for a build operation. The + PostBuildUp method is called when the chain has finished the PreBuildUp + phase and executes in reverse order from the PreBuildUp calls. + + In this class, PostBuildUp checks to see if the object was proxyable, + and if it was, wires up the handlers. + Context of the build operation. + + + + This class provides the code needed to implement the + interface on a class. + + + + + This class handles parameter type mapping. When we generate + a generic method, we need to make sure our parameter type + objects line up with the generic parameters on the generated + method, not on the one we're overriding. + + + + + A utility class that takes a set of s + and pulls out shadowed methods, only returning the ones that + are actually accessible to be overriden. + + + + + Take the list of methods and put them together into lists index by method name. + + Methods to sort through. + + + + Given a list of overloads for a method, return only those methods + that are actually visible. In other words, if there's a "new SomeType" method + somewhere, return only the new one, not the one from the base class + that's now hidden. + + Sequence of methods to process. + Sequence of returned methods. + + + + Take a semi-randomly ordered set of methods on a type and + sort them into groups by name and by parameter list. + + The list of methods. + Sequence of lists of methods, grouped by method name. + + + + Given a set of hiding overloads, return only the currently visible one. + + The set of overloads. + The most visible one. + + + + Given a method, return a value indicating how deeply in the + inheritance hierarchy the method is declared. Current type = 0, + parent = 1, grandparent = 2, etc. + + Method to check. + Declaration depth + + + + A implementation that can compare two + based on their parameter lists. + + First to compare. + Second to compare. + < 0, 0, or > 0 based on which one is "greater" than the other. + + + + Compare two parameter lists. + + First parameter list. + Second parameter list. + < 0, 0, or > 0. + + + + Compare two objects by type. + + First + First + < 0, 0, or > 0 + + + + A type based interceptor that works by generated a new class + on the fly that derives from the target class. + + + + + Can this interceptor generate a proxy for the given type? + + Type to check. + True if interception is possible, false if not. + + + + Returns a sequence of methods on the given type that can be + intercepted. + + The intercepted type. + The concrete type of the implementing object. + Sequence of objects. + + + + Create a type to proxy for the given type . + + Type to proxy. + Additional interfaces the proxy must implement. + New type that can be instantiated instead of the + original type t, and supports interception. + + + + An that returns a sequence of + instances for an intercepted object. + + + + + Get the set of object to be used for the given type and + interceptor. + + + This method will return a sequence of s. These behaviors will + only be included if their properties are true. + + Context for the current build operation. + Interceptor that will be used to invoke the behavior. + Type that interception was requested on. + Type that implements the interception. + + + + + Get the set of that can be used to resolve the + behaviors. + + + + + Key for handler pipelines. + + + + + Creates a new for the supplied method. + + The method for the key. + The new key. + + + + Compare two instances. + + Object to compare to. + True if the two keys are equal, false if not. + + + + Calculate a hash code for this instance. + + A hash code. + + + + Compare two instances for equality. + + First of the two keys to compare. + Second of the two keys to compare. + True if the values of the keys are the same, else false. + + + + Compare two instances for inequality. + + First of the two keys to compare. + Second of the two keys to compare. + false if the values of the keys are the same, else true. + + + + Compare two instances. + + Object to compare to. + True if the two keys are equal, false if not. + + + + A collection of objects, indexed + by . Returns an empty pipeline if a + MethodBase is requested that isn't in the dictionary. + + + + + Retrieve the pipeline assocated with the requested . + + The method for which the pipeline is being requested. + The handler pipeline for the given method. If no pipeline has + been set, returns a new empty pipeline. + + + + Set a new pipeline for a method. + + The method on which the pipeline should be set. + The new pipeline. + + + + Get the pipeline for the given method, creating it if necessary. + + Method to retrieve the pipeline for. + Handlers to initialize the pipeline with + True if the pipeline has any handlers in it, false if not. + + + + Attribute used to indicate that no interception should be applied to + the attribute target. + + + + + A class that reads and constructs handlers + based on on the target. + + + + + Base class for Policies that specifies which handlers apply to which methods of an object. + + + This base class always enforces the + before + passing the checks onto derived classes. This way, derived classes do not need to + worry about implementing this check. + It also means that derived classes cannot override this rule. This is considered a feature. + + + + Creates a new empty Policy. + + + + + Creates a new empty policy with the given name. + + Name of the policy. + + + + Checks if the rules in this policy match the given member info. + + MemberInfo to check against. + true if ruleset matches, false if it does not. + + + + Returns ordered collection of handlers in order that apply to the given member. + + Member that may or may not be assigned handlers by this policy. + The to use when creating handlers, + if necessary. + Collection of handlers (possibly empty) that apply to this member. + + + + Given a method on an object, return the set of MethodBases for that method, + plus any inteface methods that the member implements. + + Member to get Method Set for. + The set of methods + + + + Derived classes implement this method to calculate if the policy + will provide any handler to the specified member. + + Member to check. + true if policy applies to this member, false if not. + + + + Derived classes implement this method to supply the list of handlers for + this specific member. + + Member to get handlers for. + The to use when creating handlers, + if necessary. + Enumerable collection of handlers for this method. + + + + Gets the name of this policy. + + The name of the policy. + + + + Constructs a new instance of the . + + + + + Derived classes implement this method to calculate if the policy + will provide any handler to the specified member. + + Member to check. + true if policy applies to this member, false if not. + + + + Derived classes implement this method to supply the list of handlers for + this specific member. + + Member to get handlers for. + The to use when creating handlers, + if necessary. + Enumerable collection of handlers for this method. + + + + Base class for handler attributes used in the attribute-driven + interception policy. + + + + + Derived classes implement this method. When called, it + creates a new call handler as specified in the attribute + configuration. + + The to use when creating handlers, + if necessary. + A new call handler object. + + + + Gets or sets the order in which the handler will be executed. + + + + + The HandlerPipeline class encapsulates a list of s + and manages calling them in the proper order with the right inputs. + + + + + Creates a new with an empty pipeline. + + + + + Creates a new with the given collection + of s. + + Collection of handlers to add to the pipeline. + + + + Execute the pipeline with the given input. + + Input to the method call. + The ultimate target of the call. + Return value from the pipeline. + + + + Get the number of handlers in this pipeline. + + + + + Handlers implement this interface and are called for each + invocation of the pipelines that they're included in. + + + + + Implement this method to execute your handler processing. + + Inputs to the current call to the target. + Delegate to execute to get the next delegate in the handler + chain. + Return value from the target. + + + + Order in which the handler will be executed + + + + + This delegate type is the type that points to the next + method to execute in the current pipeline. + + Inputs to the current method call. + Delegate to get the next handler in the chain. + Return from the next method in the chain. + + + + This delegate type is passed to each handler's Invoke method. + Call the delegate to get the next delegate to call to continue + the chain. + + Next delegate in the handler chain to call. + + + + This interface is implemented by the matching rule classes. + A Matching rule is used to see if a particular policy should + be applied to a class member. + + + + + Tests to see if this rule applies to the given member. + + Member to test. + true if the rule applies, false if it doesn't. + + + + This interface is used to represent the call to a method. + An implementation of IMethodInvocation is passed to the + call handlers so that they may manipulate the call + (typically by changing the parameters) before the final target + gets called. + + + + + Factory method that creates the correct implementation of + IMethodReturn. + + Return value to be placed in the IMethodReturn object. + All arguments passed or returned as out/byref to the method. + Note that this is the entire argument list, including in parameters. + New IMethodReturn object. + + + + Factory method that creates the correct implementation of + IMethodReturn in the presence of an exception. + + Exception to be set into the returned object. + New IMethodReturn object + + + + Gets the inputs for this call. + + + + + Collection of all parameters to the call: in, out and byref. + + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + + + + The object that the call is made on. + + + + + The method on Target that we're aiming at. + + + + + This interface is used to represent the return value from a method. + An implementation of IMethodReturn is returned by call handlers, and + each handler can manipulate the parameters, return value, or add an + exception on the way out. + + + + + The collection of output parameters. If the method has no output + parameters, this is a zero-length list (never null). + + + + + Returns value from the method call. + + This value is null if the method has no return value. + + + + If the method threw an exception, the exception object is here. + + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + This is guaranteed to be the same dictionary that was used + in the IMethodInvocation object, so handlers can set context + properties in the pre-call phase and retrieve them in the after-call phase. + + + + + A Unity container extension that allows you to configure + whether an object should be intercepted and which mechanism should + be used to do it, and also provides a convenient set of methods for + configuring injection for instances. + + + + + + + + + + Initial the container with this extension's functionality. + + + + + API to configure interception for a type. + + Type to intercept. + Name type is registered under. + Interceptor to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept. + Interceptor to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept + Name type is registered under. + Interceptor object to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept + Interceptor object to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept. + Name type is registered under. + Instance interceptor to use. + This extension object. + + + + Set the interceptor for a type, regardless of what name is used to resolve the instances. + + Type to intercept + Interceptor instance. + This extension object. + + + + Set the interceptor for a type, regardless of what name is used to resolve the instances. + + Type to intercept + Interceptor instance. + This extension object. + + + + API to configure interception for a type. + + Type to intercept. + Instance interceptor to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept. + Name type is registered under. + Instance interceptor to use. + This extension object. + + + + API to configure interception for a type. + + Type to intercept. + Instance interceptor to use. + This extension object. + + + + API to configure the default interception settings for a type. + + Type the interception is being configured for. + The interceptor to use by default. + This extension object. + + + + API to configure the default interception settings for a type. + + Type the interception is being configured for. + The interceptor to use by default. + This extension object. + + + + Starts the definition of a new . + + The policy name. + + This is a convenient way for defining a new policy and the + instances and instances that are required by a policy. + + This mechanism is just a shortcut for what can be natively expressed by wiring up together objects + with repeated calls to the method. + + + + + This interface represents a list of either input or output + parameters. It implements a fixed size list, plus a couple + of other utility methods. + + + + + Gets the name of a parameter based on index. + + Index of parameter to get the name for. + Name of the requested parameter. + + + + Gets the ParameterInfo for a particular parameter by index. + + Index for this parameter. + ParameterInfo object describing the parameter. + + + + Gets the ParameterInfo for a particular parameter by name. + + Name of the parameter. + ParameterInfo object for the named parameter. + + + + Fetches a parameter's value by name. + + parameter name. + value of the named parameter. + + + + A is a matching rule that + is a collection of other matching rules. All the contained + rules much match for the set to match. + + + + + Tests the given member against the ruleset. The member matches + if all contained rules in the ruleset match against it. + + If the ruleset is empty, then Matches passes since no rules failed. + MemberInfo to test. + true if all contained rules match, false if any fail. + + + + A implementation that fails to match + if the method in question has the ApplyNoPolicies attribute on it. + + + + + Check if the matches this rule. + + This rule returns true if the member does NOT have the + on it, or a containing type doesn't have the attribute. + Member to check. + True if the rule matches, false if it doesn't. + + + + An that matches the assembly name of the + given member. + + + + + Constructs a new with the given + assembly name (or partial name). + + Assembly name to match. + + + + Constructs a new that matches + against the given assembly. + + Assembly to match. + + + + Determines if the supplied matches the rule. + + + This rule matches if the assembly containing the given + matches the name given. The rule used for matches lets you include the parts + of the assembly name in order. You can specify assembly name only, assembly and version, + assembly, version and culture, or the fully qualified assembly name. + + Member to check. + true if is in a matching assembly, false if not. + + + + An implementation of that checks to see if the + member (or type containing that member) have any s. + + + + + Checks to see if matches the rule. + + Returns true if any s are present on the method + or the type containing that method. + Member to check. + true if member matches, false if not. + + + + An implementation of that checks to see if + the member tested has an arbitrary attribute applied. + + + + + Constructs a new . + + Attribute to match. + If true, checks the base class for attributes as well. + + + + Checks to see if the given matches the rule. + + Member to check. + true if it matches, false if not. + + + + Class used for storing information about a single name/ignoreCase + pair. This class is also used as a base class for other classes that + need this pair plus some other properties. + + + + + Constructs an empty object with empty + string and ignoreCase = false. + + + + + Constructs a object that matches the given + string. IgnoreCase is false. + + The name to match. + + + + Constructs a object that matches the + given string, setting the ignoreCase flag to the given value. + + The name to match. + true to do case insensitive comparison, false to do case sensitive. + + + + Gets or sets the name to match. + + The name to match. + + + + Gets or sets whether to do case sensitive comparisons of Match. + + If false, case sensitive comparison. If true, case insensitive comparisons. + + + + A matching rule that matches when the given member name is + the same as the one supplied in the constructor. + + + + + Create a new that matches the + given member name. Wildcards are allowed. + + Name to match against. Comparison is case sensitive. + + + + Create a new that matches the + given member name. Wildcards are allowed. + + Name to match against. + If false, name comparisons are case sensitive. If true, name comparisons are case insensitive. + + + + Create a new that matches the + given member names. Wildcards are allowed. + + collections of names to match. If any of these patterns match, the rule matches. Comparisons are case sensitive. + + + + Create a new that matches the + given member names. Wildcards are allowed. + + Collections of names to match. If any of these patterns match, the rule matches. + If false, name comparisons are case sensitive. If true, name comparisons are case insensitive. + + + + Create a new that matches + one of the given member names. Wildcards are allowed. + + List of objects containing + the pattern to match and case sensitivity flag. + + + + Check if the given matches one of this + object's matching patterns. + + Member to check. + True if matches, false if not. + + + + Match methods with the given names and method signature. + + + + + Creates a new that matches methods + with the given name, with parameter types matching the given list. + + Method name to match. Wildcards are allowed. + Parameter type names to match, in order. Wildcards are allowed. + If false, name comparisons are case sensitive. If true, name comparisons are case insensitive. + + + + Create a new that matches methods + with the given name, with parameter types matching the given list. + + Name comparisons are case sensitive. + Method name to match. Wildcards are allowed. + Parameter type names to match, in order. Wildcards are allowed. + + + + Create a new that matches any method + with parameter types matching the given list. + + Name comparisons are case sensitive. + Parameter type names to match, in order. Wildcards are allowed. + + + + Create a new that matches any method + with parameter types matching the given list. + + Parameter type names to match, in order. Wildcards are allowed. + If false, name comparisons are case sensitive. If true, name comparisons are case insensitive. + + + + Check to see if the given method matches the name and signature. + + Member to check. + True if match, false if not. + + + + An that matches members in a given namespace. You can + specify either a single namespace (e.g. System.Data) or a namespace root + (e.g. System.Data.* to match types in that namespace or below. + + + + + Create a new that matches the given + namespace. + + namespace name to match. Comparison is case sensitive. + + + + Create a new that matches the given + namespace. + + namespace name to match. + If false, comparison is case sensitive. If true, comparison is case insensitive. + + + + Create a new that matches any of + the given namespace names. + + Collection of namespace names to match. + + + + Check to see if the given is in a namespace + matched by any of our given namespace names. + + member to check. + True if member is contained in a matching namespace, false if not. + + + + A helper class that encapsulates the name to match, case sensitivity flag, + and the wildcard rules for matching namespaces. + + + + + Construct a new that matches the + given namespace name. + + Namespace name to match. + If false, comparison is case sensitive. If true, comparison is case insensitive. + + + + Check if the given type is in a matching namespace. + + Type to check. + True if type is in a matching namespace, false if not. + + + + An that matches methods that have any parameters + of the given types. + + + + + Creates a new that matches if any of + the method parameters match ones in the given collection. + + Collection of that + describes the types to match. + + + + Check the given member to see if it has any matching parameters. + + Member to match. + true if member matches, false if it doesn't. + + + + The list of describing the parameter types to match. + + The collection of matches. + + + + Describes the type of parameter to match. + + + + + Input parameter + + + + + Output parameter + + + + + Input or output parameter + + + + + Method return value + + + + + A class that stores information about a single type to match. + + + + + Creates a new uninitialized . + + + + + Creates a new matching the given kind of parameter. + + of parameter to match. + + + + Creates a new matching the given parameter + type and kind. + + Parameter name to match. + of parameter to match. + + + + Creates a new matching the given parameter + type and kind. + + Parameter name to match. + If false, compare type names using case-sensitive comparison. + If true, compare type names using case-insensitive comparison. + of parameter to match. + + + + What kind of parameter to match. + + indicating which kind of parameters to match. + + + + An implementation that matches properties + by name. You can match the getter, setter, or both. + + + + + Construct a new that matches the + getter or setter of the given property. + + Name of the property. Name comparison is case sensitive. Wildcards are allowed. + + + + Constructs a new that matches the + given method of the given property. + + Name of the property. Name comparison is case sensitive. Wildcards are allowed. + Match the getter, setter, or both. + + + + Constructs a new that matches the + given method of the given property. + + Name of the property to match. Wildcards are allowed. + Match the getter, setter, or both. + If false, name comparison is case sensitive. If true, name comparison is case insensitive. + + + + Constructs a new that matches any of the + given properties. + + Collection of defining which + properties to match. + + + + Checks if the given member matches the rule. + + Member to check. + True if it matches, false if it does not. + + + + Specifies which methods of a property should be matches by + the . + + + + + Match the property getter method. + + + + + Match the property setter method. + + + + + Match either the getter or setter method. + + + + + Information about a property match. + + + + + Construct a new that matches the get or set methods + of the given property name, and does a case-sensitive comparison. + + Property name to match. + + + + Constructs a new that matches the given methods of + the given property name, doing a case-sensitive comparison. + + Property name to match. + specifying which methods of the property to match. + + + + Construt a new that matches the given methods of + the given property name. + + Property name to match. + specifying which methods of the property to match. + If false, name comparison is case sensitive. If true, name comparison is case insensitive. + + + + The to use when doing name comparisons on this property. + + Specifies which methods of the property to match. + + + + An that checks to see if a member has a specified + type. + + + + + Construct a new that matches + members with the given return type. + + Type to look for. + + + + Construct a new that matches + the given return type by name. + + See the class for details on how + type name matches are done. + Type name to match. Name comparisons are case sensitive. + + + + Construct a new that matches + the given return type by name. + + See the class for details on how + type name matches are done. + Type name to match. + If false, name comparison is case sensitive. If true, comparison + is case insensitive. + + + + Check to see if the given member has a matching return type. + + Member to check. + true if return types match, false if they don't. + + + + A that checks a member for the presence + of the on the method, property, or class, and + that the given string matches. + + + + + Constructs a new , looking for + the given string. The comparison is case sensitive. + + tag string to match. + + + + Constructs a new , looking for + the given string. The comparison is case sensitive if is + false, case insensitive if is true. + + tag string to match. + if false, case-senstive comparison. If true, case-insensitive comparison. + + + + Check the given member for the presence of the and + match the strings. + + Member to check. + True if tag strings match, false if they don't. + + + + A matching rule that matches when the member is declared + in the given type. + + + + + Constructs a new that matches the + given type. + + The type to match. + + + + Constructs a new that matches types + with the given name. + + Comparisons are case sensitive. + Type name to match. + + + + Constructs a new that matches types + with the given name, using the given case sensitivity. + + Type name to match. + if false, do case-sensitive comparison. If true, do case-insensitive. + + + + Constructs a new that will match + any of the type names given in the collection of match information. + + The match information to match. + + + + Checks if the given member matches any of this object's matches. + + Member to match. + True if match, false if not. + + + + Checks if the given type matches any of this object's matches. + + Matches may be on the namespace-qualified type name or just the type name. + Type to check. + True if it matches, false if it doesn't. + + + + An implementation of that wraps a provided array + containing the argument values. + + + + + Construct a new that wraps the + given array of arguments. + + Complete collection of arguments. + Type information about about each parameter. + A that indicates + whether a particular parameter is part of the collection. Used to filter out only input + parameters, for example. + + + + Gets the ParameterInfo for a particular parameter by index. + + Index for this parameter. + ParameterInfo object describing the parameter. + + + + Gets the for the given named parameter. + + Name of parameter. + for the requested parameter. + + + + Gets the name of a parameter based on index. + + Index of parameter to get the name for. + Name of the requested parameter. + + + + Adds to the collection. This is a read only collection, so this method + always throws . + + Object to add. + Nothing, always throws. + Always throws this. + + + + Checks to see if the collection contains the given object. + + Tests for the object using object.Equals. + Object to find. + true if object is in collection, false if it is not. + + + + Remove all items in the collection. This collection is fixed-size, so this + method always throws . + + This is always thrown. + + + + Returns the index of the given object, or -1 if not found. + + Object to find. + zero-based index of found object, or -1 if not found. + + + + Inserts a new item. This is a fixed-size collection, so this method throws . + + Index to insert at. + Always throws. + Always throws this. + + + + Removes the given item. This is a fixed-size collection, so this method throws . + + Always throws. + Always throws this. + + + + Removes the given item. This is a fixed-size collection, so this method throws . + + Always throws. + Always throws this. + + + + Copies the contents of this collection to the given array. + + Destination array. + index to start copying from. + + + + Gets an enumerator object to support the foreach construct. + + Enumerator object. + + + + Fetches a parameter's value by name. + + parameter name. + value of the named parameter. + + + + Gets the value of a parameter based on index. + + Index of parameter to get the value for. + Value of the requested parameter. + + + + Is this collection read only? + + No, it is not read only, the contents can change. + + + + Is this collection fixed size? + + Yes, it is. + + + + Total number of items in the collection. + + The count. + + + + Gets a synchronized version of this collection. WARNING: Not implemented completely, + DO NOT USE THIS METHOD. + + + + + Is the object synchronized for thread safety? + + No, it isn't. + + + + An internal struct that maps the index in the arguments collection to the + corresponding about that argument. + + + + + Construct a new object linking the + given index and object. + + Index into arguments array (zero-based). + for the argument at . + + + + Transient class that supports convenience method for specifying interception policies. + + + + + Adds a reference to matching rule by name. + + The name for the matching rule. + + The than allows further configuration of the policy. + + + The details of how the rule should be created by the container must be specified using a + standard injection specification mechanism. + + + + + Makes a matching rule in the current policy. + + The new for the policy. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a matching rule in the current policy. + + The type for the new matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a matching rule in the current policy, using the given . + + The type for the new matching rule. + The that controls the lifetime + of the configured matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a matching rule in the current policy. + + The type for the new matching rule. + The name for the injection configuration for the matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a matching rule in the current policy, using the given . + + The type for the new matching rule. + The name for the injection configuration for the matching rule. + The that controls the lifetime + of the configured matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a matching rule in the current policy. + + The type for the new matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a matching rule in the current policy, using the given . + + The type for the new matching rule. + The that controls the lifetime + of the configured matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a matching rule in the current policy. + + The type for the new matching rule. + The name for the injection configuration for the matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a matching rule in the current policy, + using the given . + + The type for the new matching rule. + The name for the injection configuration for the matching rule. + The that controls the lifetime + of the configured matching rule. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Adds a reference to call handler by name. + + The name for the call handler. + + The than allows further configuration of the policy. + + + The details of how the handler should be created by the container must be specified using a + standard injection specification mechanism. + + + + + Makes a call handler in the current policy. + + The new for the policy. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a call handler in the current policy. + + The type for the new call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a call handler in the current policy, using the given . + + The type for the new call handler. + The that controls the lifetime + of the configured call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a call handler in the current policy. + + The type for the new call handler. + The name for the injection configuration for the call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a call handler in the current policy, + using the given . + + The type for the new call handler. + The name for the injection configuration for the call handler. + The that controls the lifetime + of the configured call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a call handler in the current policy. + + The type for the new call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new and makes it available + as a call handler in the current policy, using the given . + + The type for the new call handler. + The that controls the lifetime + of the configured call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a call handler in the current policy. + + The type for the new call handler. + The name for the injection configuration for the call handler . + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + Configures injection for a new using the specified name + and makes it available as a call handler in the current policy, + using the given . + + The type for the new call handler. + The name for the injection configuration for the call handler . + The that controls the lifetime + of the configured call handler. + Objects containing the details on which members to inject and how. + + The than allows further configuration of the policy. + + + + + The that is currently being + configured. + + + + + The extension to which the policy was added. + + + Use this property to start adding a new policy. + + + + + A collection of Policy objects. The policies within a PolicySet combine using + an "or" operation. + + + + + Creates a new containing the given policies. + + Policies to put into the policy set. + + + + Gets the policies that apply to the given member. + + Member to get policies for. + Collection of policies that apply to this member. + + + + Gets the policies in the that do not + apply to the given member. + + Member to check. + Collection of policies that do not apply to . + + + + Gets the handlers that apply to the given member based on all policies in the . + + Member to get handlers for. + The to use when creating handlers, + if necessary. + Collection of call handlers for . + + + + Interceptor that performs policy injection. + + + + + Interception behaviors implement this interface and are called for each + invocation of the pipelines that they're included in. + + + + + Implement this method to execute your behavior processing. + + Inputs to the current call to the target. + Delegate to execute to get the next delegate in the behavior chain. + Return value from the target. + + + + Returns the interfaces required by the behavior for the objects it intercepts. + + The required interfaces. + + + + Returns a flag indicating if this behavior will actually do anything when invoked. + + This is used to optimize interception. If the behaviors won't actually + do anything (for example, PIAB where no policies match) then the interception + mechanism can be skipped completely. + + + + Initializes a new instance of the with a pipeline manager. + + The for the new instance. + + + + Initializes a new instance of the with the given information + about what's being intercepted and the current set of injection policies. + + Information about what will be injected. + Current injection policies. + Unity container that can be used to resolve call handlers. + + + + Applies the policy injection handlers configured for the invoked method. + + Inputs to the current call to the target. + Delegate to execute to get the next delegate in the handler + chain. + Return value from the target. + + + + Returns the interfaces required by the behavior for the objects it intercepts. + + An empty array of interfaces. + + + + Returns a flag indicating if this behavior will actually do anything when invoked. + + This is used to optimize interception. If the behaviors won't actually + do anything (for example, PIAB where no policies match) then the interception + mechanism can be skipped completely. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Intercepted abstract method was invoked.. + + + + + Looks up a localized string similar to Additional interfaces do not have an implementation.. + + + + + Looks up a localized string similar to The additional interfaces supplied are invalid: {0}. + + + + + Looks up a localized string similar to Type must be a subclass of System.Attribute.. + + + + + Looks up a localized string similar to Could not create instance of type {0} with no constructor arguments.. + + + + + Looks up a localized string similar to Collection contains a null element.. + + + + + Looks up a localized string similar to The collection of interfaces is null.. + + + + + Looks up a localized string similar to The required interfaces for behavior {1} are invalid: {0}. + + + + + Looks up a localized string similar to The type {0} is not an interface.. + + + + + Looks up a localized string similar to Null type.. + + + + + Looks up a localized string similar to The type {0} is an open generic.. + + + + + Looks up a localized string similar to The type {0} is not interceptable.. + + + + + Looks up a localized string similar to Could not find the implementation of interface method {0}.{1} in type {2}. + + + + + Looks up a localized string similar to Null is not permitted as an interception behavior.. + + + + + A class that wraps the inputs of a into the + interface. + + + + + Constructs a new that wraps the + given method call and arguments. + + The call message. + The arguments. + + + + An implementation of that wraps the + remoting-based in the PIAB call + interface. + + + + + Creates a new implementation that wraps + the given , with the given ultimate + target object. + + Remoting call message object. + Ultimate target of the method call. + + + + Factory method that creates the correct implementation of + IMethodReturn. + + In this implementation we create an instance of . + Return value to be placed in the IMethodReturn object. + All arguments passed or returned as out/byref to the method. + Note that this is the entire argument list, including in parameters. + New IMethodReturn object. + + + + Factory method that creates the correct implementation of + IMethodReturn in the presence of an exception. + + Exception to be set into the returned object. + New IMethodReturn object + + + + Gets the inputs for this call. + + The input collection. + + + + Collection of all parameters to the call: in, out and byref. + + The arguments collection. + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + The invocation context dictionary. + + + + The object that the call is made on. + + The target object. + + + + The method on Target that we're aiming at. + + The target method base. + + + + Gets the collection of arguments being passed to the target. + + This method exists becuase the underlying remoting call message + does not let handlers change the arguments. + Array containing the arguments to the target. + + + + An implementation of that wraps the + remoting call and return messages. + + + + + Creates a new object that contains a + return value. + + The original call message that invoked the method. + Return value from the method. + Collections of arguments passed to the method (including the new + values of any out params). + Invocation context dictionary passed into the call. + + + + Creates a new object that contains an + exception thrown by the target. + + Exception that was thrown. + The original call message that invoked the method. + Invocation context dictionary passed into the call. + + + + Constructs a for the remoting + infrastructure based on the contents of this object. + + The instance. + + + + The collection of output parameters. If the method has no output + parameters, this is a zero-length list (never null). + + The output parameter collection. + + + + Return value from the method call. + + This value is null if the method has no return value. + The return value. + + + + If the method threw an exception, the exception object is here. + + The exception, or null if no exception was thrown. + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + This is guaranteed to be the same dictionary that was used + in the IMethodInvocation object, so handlers can set context + properties in the pre-call phase and retrieve them in the after-call phase. + + The invocation context dictionary. + + + + A class that wraps the outputs of a into the + interface. + + + + + Constructs a new that wraps the + given method call and arguments. + + The call message. + The arguments. + + + + A policy is a combination of a matching rule set and a set of handlers. + If the policy applies to a member, then the handlers will be enabled for + that member. + + + + + Creates a new object with a set of matching rules + and the names to use when resolving handlers. + + + + + Creates a new object with a name, a set of matching rules + and the names to use when resolving handlers. + + + + + Checks if the rules in this policy match the given member info. + + MemberInfo to check against. + true if ruleset matches, false if it does not. + + + + Return ordered collection of handlers in order that apply to the given member. + + Member that may or may not be assigned handlers by this policy. + The to use when creating handlers, + if necessary. + Collection of handlers (possibly empty) that apply to this member. + + + + A simple attribute used to "tag" classes, methods, or properties with a + string that can later be matched via the . + + + + + Creates a new with the given string. + + The tag string. + + + + The string tag for this attribute. + + the tag. + + + + Stores information about a single to be used on an intercepted object and + configures a container accordingly. + + + + + + Initializes a new instance of the with a + . + + The interception behavior to use. + + + + Initializes a new instance of the with a + given type/name pair. + + Type of behavior to + + + + + Initializes a new instance of the with a + given behavior type. + + Type of behavior to + + + + Get the list of behaviors for the current type so that it can be added to. + + Policy list. + Implementation type to set behaviors for. + Name type is registered under. + An instance of . + + + + A generic version of that lets you + specify behavior types using generic syntax. + + Type of behavior to register. + + + + Initializes a new instance of the with a + given behavior type. + + + + + Initializes a new instance of the with a + given type/name pair. + + Name to use to resolve the behavior. + + + + An that accumulates a sequence of + instances for an intercepted object. + + + + + Get the set of object to be used for the given type and + interceptor. + + + This method will return a sequence of s. These behaviors will + only be included if their properties are true. + + Context for the current build operation. + Interceptor that will be used to invoke the behavior. + Type that interception was requested on. + Type that implements the interception. + + + + + Get the set of that can be used to resolve the + behaviors. + + + + + The InterceptionBehaviorPipeline class encapsulates a list of s + and manages calling them in the proper order with the right inputs. + + + + + Creates a new with an empty pipeline. + + + + + Creates a new with the given collection + of s. + + Collection of interception behaviors to add to the pipeline. + + + + Execute the pipeline with the given input. + + Input to the method call. + The ultimate target of the call. + Return value from the pipeline. + + + + Adds a to the pipeline. + + The interception behavior to add. + + + + Get the number of interceptors in this pipeline. + + + + + This delegate type is the type that points to the next + method to execute in the current pipeline. + + Inputs to the current method call. + Delegate to get the next interceptor in the chain. + Return from the next method in the chain. + + + + This delegate type is passed to each interceptor's Invoke method. + Call the delegate to get the next delegate to call to continue + the chain. + + Next delegate in the interceptor chain to call. + + + + A "glob" is a string matching pattern. It is similar to the + matches available in the file system (*.cs, for example). The Glob + class implements this string matching. + + Glob supports the following metacharacters: + * - match zero or more characters + ? - match any one character + [abc] - match one character if it's in the characters inside the brackets. + All other characters in the glob are literals. + + + + + Constructs a new instance that matches the given pattern. + + + The pattern match is case sensitive by default. + + Pattern to use. See summary for + details of the pattern. + + + + Constructs a new instance that matches the given pattern. + + The pattern to use. See summary for + details of the patterns supported. + If true, perform a case sensitive match. + If false, perform a case insensitive comparison. + + + + Checks to see if the given string matches the pattern. + + String to check. + True if it matches, false if it doesn't. + + + + A collection of utility functions to encapsulate details of + reflection and finding attributes. + + + + + Given a MethodBase for a property's get or set method, + return the corresponding property info. + + MethodBase for the property's get or set method. + PropertyInfo for the property, or null if method is not part of a property. + + + + Given a MethodInfo for a property's get or set method, + return the corresponding property info. + + MethodBase for the property's get or set method. + PropertyInfo for the property, or null if method is not part of a property. + + + + Given a particular MemberInfo, return the custom attributes of the + given type on that member. + + Type of attribute to retrieve. + The member to look at. + True to include attributes inherited from base classes. + Array of found attributes. + + + + Given a particular MemberInfo, find all the attributes that apply to this + member. Specifically, it returns the attributes on the type, then (if it's a + property accessor) on the property, then on the member itself. + + Type of attribute to retrieve. + The member to look at. + true to include attributes inherited from base classes. + Array of found attributes. + + + + A small implementation of that returns the + given object. + + + + + Create a new instance. + + Information about which constructor to select. + + + + Choose the constructor to call for the given type. + + Current build context + The to add any + generated resolver objects into. + The chosen constructor. + + + + MethodInfo objects for the methods we need to generate + calls to on IMethodInvocation. + + + + + Class that handles generating the dynamic types used for interception. + + + + + Create a new that will generate a + wrapper class for the requested . + + Type to generate the wrapper for. + Additional interfaces the proxy must implement. + + + + Create the wrapper class for the given type. + + Wrapper type. + + + + Represents the implementation of a method override. + + + + + Used to throw an for overrides on abstract methods. + + + + + Implementation of used + by the virtual method interceptor. + + + + + Construct a new instance for the + given target object and method, passing the + to the target method. + + Object that is target of this invocation. + Method on to call. + Values for the parameters. + + + + Factory method that creates the correct implementation of + IMethodReturn. + + Return value to be placed in the IMethodReturn object. + All arguments passed or returned as out/byref to the method. + Note that this is the entire argument list, including in parameters. + New IMethodReturn object. + + + + Factory method that creates the correct implementation of + IMethodReturn in the presence of an exception. + + Exception to be set into the returned object. + New IMethodReturn object + + + + Gets the inputs for this call. + + + + + Collection of all parameters to the call: in, out and byref. + + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + + + + The object that the call is made on. + + + + + The method on Target that we're aiming at. + + + + + An implementation of used by + the virtual method interception mechanism. + + + + + Construct a instance that returns + a value. + + The method invocation. + Return value (should be null if method returns void). + All arguments (including current values) passed to the method. + + + + Construct a instance for when the target method throws an exception. + + The method invocation. + Exception that was thrown. + + + + The collection of output parameters. If the method has no output + parameters, this is a zero-length list (never null). + + + + + Returns value from the method call. + + This value is null if the method has no return value. + + + + If the method threw an exception, the exception object is here. + + + + + Retrieves a dictionary that can be used to store arbitrary additional + values. This allows the user to pass values between call handlers. + + This is guaranteed to be the same dictionary that was used + in the IMethodInvocation object, so handlers can set context + properties in the pre-call phase and retrieve them in the after-call phase. + + + + diff --git a/Lib/Microsoft.Practices.Unity.dll b/Lib/Microsoft.Practices.Unity.dll new file mode 100644 index 0000000000000000000000000000000000000000..84f1870df0ba2ff477d65a17a81191f4cbe476eb GIT binary patch literal 133944 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 =a6b1fTe|3ew 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 B|C#^* literal 0 HcmV?d00001 diff --git a/Lib/Microsoft.Practices.Unity.xml b/Lib/Microsoft.Practices.Unity.xml new file mode 100644 index 0000000..2e0af9b --- /dev/null +++ b/Lib/Microsoft.Practices.Unity.xml @@ -0,0 +1,5910 @@ + + + + Microsoft.Practices.Unity + + + + + Base class for attributes that can be placed on parameters + or properties to specify how to resolve the value for + that parameter or property. + + + + + Create an instance of that + will be used to get the value for the member this attribute is + applied to. + + Type of parameter or property that + this attribute is decoration. + The resolver object. + + + + This attribute is used to indicate which constructor to choose when + the container attempts to build a type. + + + + + This attribute is used to mark methods that should be called when + the container is building an object. + + + + + This attribute is used to mark properties and parameters as targets for injection. + + + For properties, this attribute is necessary for injection to happen. For parameters, + it's not needed unless you want to specify additional information to control how + the parameter is resolved. + + + + + Create an instance of with no name. + + + + + Create an instance of with the given name. + + Name to use when resolving this dependency. + + + + Create an instance of that + will be used to get the value for the member this attribute is + applied to. + + Type of parameter or property that + this attribute is decoration. + The resolver object. + + + + The name specified in the constructor. + + + + + An used to mark a dependency + as optional - the container will try to resolve it, and return null + if the resolution fails rather than throw. + + + + + Construct a new object. + + + + + Construct a new object that + specifies a named dependency. + + Name of the dependency. + + + + Create an instance of that + will be used to get the value for the member this attribute is + applied to. + + Type of parameter or property that + this attribute is decoration. + The resolver object. + + + + Name of the dependency. + + + + + A that composites other + ResolverOverride objects. The GetResolver operation then + returns the resolver from the first child override that + matches the current context and request. + + + + + Base class for all override objects passed in the + method. + + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + Wrap this resolver in one that verifies the type of the object being built. + This allows you to narrow any override down to a specific type easily. + + Type to constrain the override to. + The new override. + + + + Wrap this resolver in one that verifies the type of the object being built. + This allows you to narrow any override down to a specific type easily. + + Type to constrain the override to. + The new override. + + + + Add a new to the collection + that is checked. + + item to add. + + + + Add a setof s to the collection. + + items to add. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + 2 + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + Class that returns information about the types registered in a container. + + + + + The type that was passed to the method + as the "from" type, or the only type if type mapping wasn't done. + + + + + The type that this registration is mapped to. If no type mapping was done, the + property and this one will have the same value. + + + + + Name the type was registered under. Null for default registration. + + + + + The registered lifetime manager instance. + + + + + The lifetime manager for this registration. + + + This property will be null if this registration is for an open generic. + + + + A class that overrides + the value injected whenever there is a dependency of the + given type, regardless of where it appears in the object graph. + + + + + Create an instance of to override + the given type with the given value. + + Type of the dependency. + Value to use. + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + A convenience version of that lets you + specify the dependency type using generic syntax. + + Type of the dependency to override. + + + + Construct a new object that will + override the given dependency, and pass the given value. + + + + + A convenience form of that lets you + specify multiple parameter overrides in one shot rather than having + to construct multiple objects. + + + This class isn't really a collection, it just implements IEnumerable + so that we get use of the nice C# collection initializer syntax. + + + + + Base helper class for creating collections of objects + for use in passing a bunch of them to the resolve call. This base class provides + the mechanics needed to allow you to use the C# collection initializer syntax. + + Concrete type of the this class collects. + Key used to create the underlying override object. + Value that the override returns. + + + + Add a new override to the collection with the given key and value. + + Key - for example, a parameter or property name. + Value - the value to be returned by the override. + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + 2 + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + 1 + + + + When implemented in derived classes, this method is called from the + method to create the actual objects. + + Key value to create the resolver. + Value to store in the resolver. + The created . + + + + When implemented in derived classes, this method is called from the + method to create the actual objects. + + Key value to create the resolver. + Value to store in the resolver. + The created . + + + + Event argument class for the event. + + + + + Construct a new object with the + given child container object. + + An for the newly created child + container. + + + + The newly created child container. + + + + + An extension context for the created child container. + + + + + Base class for subclasses that let you specify that + an instance of a generic type parameter should be resolved. + + + + + Base type for objects that are used to configure parameters for + constructor or method injection, or for getting the value to + be injected into a property. + + + + + Test to see if this parameter value has a matching type for the given type. + + Type to check. + True if this parameter value is compatible with type , + false if not. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + Convert the given set of arbitrary values to a sequence of InjectionParameterValue + objects. The rules are: If it's already an InjectionParameterValue, return it. If + it's a Type, return a ResolvedParameter object for that type. Otherwise return + an InjectionParameter object for that value. + + The values to build the sequence from. + The resulting converted sequence. + + + + Convert an arbitrary value to an InjectionParameterValue object. The rules are: + If it's already an InjectionParameterValue, return it. If it's a Type, return a + ResolvedParameter object for that type. Otherwise return an InjectionParameter + object for that value. + + The value to convert. + The resulting . + + + + Name for the type represented by this . + This may be an actual type name or a generic argument name. + + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + name to use when looking up in the container. + + + + Test to see if this parameter value has a matching type for the given type. + + Type to check. + True if this parameter value is compatible with type , + false if not. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + Return a instance that will + return this types value for the parameter. + + The actual type to resolve. + The resolution key. + The . + + + + Name for the type represented by this . + This may be an actual type name or a generic argument name. + + + + + A that lets you specify that + an instance of a generic type parameter should be resolved, providing the + value if resolving fails. + + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + name to use when looking up in the container. + + + + Return a instance that will + return this types value for the parameter. + + The actual type to resolve. + The resolution key. + The . + + + + A class that lets you specify a factory method the container + will use to create the object. + + This is a significantly easier way to do the same + thing the old static factory extension was used for. + + + + Base class for objects that can be used to configure what + class members get injected by the container. + + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Type to register. + Policy list to add policies to. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Type of interface being registered. If no interface, + this will be null. + Type of concrete type being registered. + Name used to resolve the type object. + Policy list to add policies to. + + + + Create a new instance of with + the given factory function. + + Factory function. + + + + Create a new instance of with + the given factory function. + + Factory function. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Type of interface being registered. If no interface, + this will be null. This parameter is ignored in this implementation. + Type of concrete type being registered. + Name used to resolve the type object. + Policy list to add policies to. + + + + A that can be passed to + to configure a + parameter or property as an optional dependency. + + + + + A base class for implementing classes + that deal in explicit types. + + + + + Create a new that exposes + information about the given . + + Type of the parameter. + + + + Test to see if this parameter value has a matching type for the given type. + + Type to check. + True if this parameter value is compatible with type , + false if not. + + + + The type of parameter this object represents. + + + + + Name for the type represented by this . + This may be an actual type name or a generic argument name. + + + + + Construct a new object that + specifies the given . + + Type of the dependency. + + + + Construct a new object that + specifies the given and . + + Type of the dependency. + Name for the dependency. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + A generic version of that lets you + specify the type of the dependency using generics syntax. + + Type of the dependency. + + + + Construct a new . + + + + + Construct a new with the given + . + + Name of the dependency. + + + + A special lifetime manager which works like , + except that in the presence of child containers, each child gets it's own instance + of the object, instead of sharing one in the common parent. + + + + + A that holds onto the instance given to it. + When the is disposed, + the instance is disposed with it. + + + + + Base class for Lifetime managers which need to synchronize calls to + . + + + + The purpose of this class is to provide a basic implementation of the lifetime manager synchronization pattern. + + + Calls to the method of a + instance acquire a lock, and if the instance has not been initialized with a value yet the lock will only be released + when such an initialization takes place by calling the method or if + the build request which resulted in the call to the GetValue method fails. + + + + + + + Base class for Lifetime managers - classes that control how + and when instances are created by the Unity container. + + + + + A that controls how instances are + persisted and recovered from an external store. Used to implement + things like singletons and per-http-request lifetime. + + + + + Represents a builder policy interface. Since there are no fixed requirements + for policies, it acts as a marker interface from which to derive all other + policy interfaces. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. + + The object to store. + + + + Remove the value this lifetime policy is managing from backing store. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. + + The object being stored. + + + + Remove the given object from backing store. + + + + + This interface provides a hook for the builder context to + implement error recovery when a builder strategy throws + an exception. Since we can't get try/finally blocks onto + the call stack for later stages in the chain, we instead + add these objects to the context. If there's an exception, + all the current IRequiresRecovery instances will have + their Recover methods called. + + + + + A method that does whatever is needed to clean up + as part of cleaning up after an exception. + + + Don't do anything that could throw in this method, + it will cause later recover operations to get skipped + and play real havoc with the stack trace. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + Calls to this method acquire a lock which is released only if a non-null value + has been set for the lifetime manager. + + + + Performs the actual retrieval of a value from the backing store associated + with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + This method is invoked by + after it has acquired its lock. + + + + Stores the given value into backing store for retrieval later. + + The object being stored. + Setting a value will attempt to release the lock acquired by + . + + + + Performs the actual storage of the given value into backing store for retrieval later. + + The object being stored. + This method is invoked by + before releasing its lock. + + + + Remove the given object from backing store. + + + + + A method that does whatever is needed to clean up + as part of cleaning up after an exception. + + + Don't do anything that could throw in this method, + it will cause later recover operations to get skipped + and play real havoc with the stack trace. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. + + The object being stored. + + + + Remove the given object from backing store. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + Standard Dispose pattern implementation. Not needed, but it keeps FxCop happy. + + Always true, since we don't have a finalizer. + + + + This is a custom lifetime manager that acts like , + but also provides a signal to the default build plan, marking the type so that + instances are reused across the build up object graph. + + + + + Construct a new object that does not + itself manage an instance. + + + + + Construct a new object that stores the + give value. This value will be returned by + but is not stored in the lifetime manager, nor is the value disposed. + This Lifetime manager is intended only for internal use, which is why the + normal method is not used here. + + Value to store. + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. In this class, + this is a noop, since it has special hooks down in the guts. + + The object being stored. + + + + Remove the given object from backing store. Noop in this class. + + + + + A strategy that handles Hierarchical lifetimes across a set of parent/child + containers. + + + + + Represents a strategy in the chain of responsibility. + Strategies are required to support both BuildUp and TearDown. + + + + + Represents a strategy in the chain of responsibility. + Strategies are required to support both BuildUp and TearDown. Although you + can implement this interface directly, you may also choose to use + as the base class for your strategies, as + this class provides useful helper methods and makes support BuildUp and TearDown + optional. + + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + Called during the chain of responsibility for a build operation. The + PostBuildUp method is called when the chain has finished the PreBuildUp + phase and executes in reverse order from the PreBuildUp calls. + + Context of the build operation. + + + + Called during the chain of responsibility for a teardown operation. The + PreTearDown method is called when the chain is being executed in the + forward direction. + + Context of the teardown operation. + + + + Called during the chain of responsibility for a teardown operation. The + PostTearDown method is called when the chain has finished the PreTearDown + phase and executes in reverse order from the PreTearDown calls. + + Context of the teardown operation. + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + Called during the chain of responsibility for a build operation. The + PostBuildUp method is called when the chain has finished the PreBuildUp + phase and executes in reverse order from the PreBuildUp calls. + + Context of the build operation. + + + + Called during the chain of responsibility for a teardown operation. The + PreTearDown method is called when the chain is being executed in the + forward direction. + + Context of the teardown operation. + + + + Called during the chain of responsibility for a teardown operation. The + PostTearDown method is called when the chain has finished the PreTearDown + phase and executes in reverse order from the PreTearDown calls. + + Context of the teardown operation. + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + A that will attempt to + resolve a value, and return null if it cannot rather than throwing. + + + + + A that is used at build plan execution time + to resolve a dependent value. + + + + + Get the value for a dependency. + + Current build context. + The value for the dependency. + + + + Construct a new object + that will attempt to resolve the given name and type from the container. + + Type to resolve. Must be a reference type. + Name to resolve with. + + + + Construct a new object + that will attempt to resolve the given type from the container. + + Type to resolve. Must be a reference type. + + + + Get the value for a dependency. + + Current build context. + The value for the dependency. + + + + Type this resolver will resolve. + + + + + Name this resolver will resolve. + + + + + Extension methods on to provide convenience + overloads (generic versions, mostly). + + + + + Removes an individual policy type for a build key. + + The type the policy was registered as. + to remove the policy from. + The key the policy applies. + + + + Removes a default policy. + + The type the policy was registered as. + to remove the policy from. + + + + Gets an individual policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + The policy list that actually contains the returned policy. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + to search. + The interface the policy is registered under. + The key the policy applies. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + to search. + The interface the policy is registered under. + The key the policy applies. + The policy list that actually contains the returned policy. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy list that actually contains the returned policy. + The policy in the list, if present; returns null otherwise. + + + + Gets an individual policy. + + to search. + The interface the policy is registered under. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy in the list, if present; returns null otherwise. + + + + Get the non default policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy in the list, if present; returns null otherwise. + + + + Get the non default policy. + + The interface the policy is registered under. + to search. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy list that actually contains the returned policy. + The policy in the list, if present; returns null otherwise. + + + + Get the non default policy. + + to search. + The interface the policy is registered under. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy in the list, if present; returns null otherwise. + + + + Sets an individual policy. + + The interface the policy is registered under. + to add the policy to. + The policy to be registered. + The key the policy applies. + + + + Sets a default policy. When checking for a policy, if no specific individual policy + is available, the default will be used. + + The interface to register the policy under. + to add the policy to. + The default policy to be registered. + + + + Base class for the current operation stored in the build context. + + + + + Create a new . + + Type currently being built. + + + + The type that's currently being built. + + + + + Build plan for that will + return a func that will resolve the requested type + through this container later. + + + + + A build plan is an object that, when invoked, will create a new object + or fill in a given existing one. It encapsulates all the information + gathered by the strategies to construct a particular object. + + + + + Creates an instance of this build plan's type, or fills + in the existing type if passed in. + + Context used to build up the object. + + + + Creates an instance of this build plan's type, or fills + in the existing type if passed in. + + Context used to build up the object. + + + + The almost inevitable collection of extra helper methods on + to augment the rich set of what + Linq already gives us. + + + + + Execute the provided on every item in . + + Type of the items stored in + Sequence of items to process. + Code to run over each item. + + + + Create a single string from a sequenc of items, separated by the provided , + and with the conversion to string done by the given . + + This method does basically the same thing as , + but will work on any sequence of items, not just arrays. + Type of items in the sequence. + Sequence of items to convert. + Separator to place between the items in the string. + The conversion function to change TItem -> string. + The resulting string. + + + + Create a single string from a sequenc of items, separated by the provided , + and with the conversion to string done by the item's method. + + This method does basically the same thing as , + but will work on any sequence of items, not just arrays. + Type of items in the sequence. + Sequence of items to convert. + Separator to place between the items in the string. + The resulting string. + + + + A class that lets you + override a named parameter passed to a constructor. + + + + + Construct a new object that will + override the given named constructor parameter, and pass the given + value. + + Name of the constructor parameter. + Value to pass for the constructor. + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + A convenience form of that lets you + specify multiple parameter overrides in one shot rather than having + to construct multiple objects. + + + + + When implemented in derived classes, this method is called from the + method to create the actual objects. + + Key value to create the resolver. + Value to store in the resolver. + The created . + + + + A that lets you override + the value for a specified property. + + + + + Create an instance of . + + The property name. + Value to use for the property. + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + A convenience form of that lets you + specify multiple property overrides in one shot rather than having + to construct multiple objects. + + + + + When implemented in derived classes, this method is called from the + method to create the actual objects. + + Key value to create the resolver. + Value to store in the resolver. + The created . + + + + Interface defining the configuration interface exposed by the + Static Factory extension. + + + + + Base interface for all extension configuration interfaces. + + + + + Retrieve the container instance that we are currently configuring. + + + + + Register the given factory delegate to be called when the container is + asked to resolve . + + Type that will be requested from the container. + Delegate to invoke to create the instance. + The container extension object this method was invoked on. + + + + Register the given factory delegate to be called when the container is + asked to resolve and . + + Type that will be requested from the container. + The name that will be used when requesting to resolve this type. + Delegate to invoke to create the instance. + The container extension object this method was invoked on. + + + + Represents the context in which a build-up or tear-down operation runs. + + + + + Represents the context in which a build-up or tear-down operation runs. + + + + + Add a new set of resolver override objects to the current build operation. + + objects to add. + + + + Get a object for the given + or null if that dependency hasn't been overridden. + + Type of the dependency. + Resolver to use, or null if no override matches for the current operation. + + + + A convenience method to do a new buildup operation on an existing context. + + Key to use to build up. + Created object. + + + + A convenience method to do a new buildup operation on an existing context. This + overload allows you to specify extra policies which will be in effect for the duration + of the build. + + Key defining what to build up. + A delegate that takes a . This + is invoked with the new child context before the build up process starts. This gives callers + the opportunity to customize the context for the build process. + Created object. + + + + Gets the head of the strategy chain. + + + The strategy that's first in the chain; returns null if there are no + strategies in the chain. + + + + + Gets the associated with the build. + + + The associated with the build. + + + + + Gets the original build key for the build operation. + + + The original build key for the build operation. + + + + + Get the current build key for the current build operation. + + + + + The set of policies that were passed into this context. + + This returns the policies passed into the context. + Policies added here will remain after buildup completes. + The persistent policies for the current context. + + + + Gets the policies for the current context. + + Any policies added to this object are transient + and will be erased at the end of the buildup. + + The policies for the current context. + + + + + Gets the collection of objects + that need to execute in event of an exception. + + + + + The current object being built up or torn down. + + + The current object being manipulated by the build operation. May + be null if the object hasn't been created yet. + + + + Flag indicating if the build operation should continue. + + true means that building should not call any more + strategies, false means continue to the next strategy. + + + + An object representing what is currently being done in the + build chain. Used to report back errors if there's a failure. + + + + + The build context used to resolve a dependency during the build operation represented by this context. + + + + + Initialize a new instance of the class. + + + + + Initialize a new instance of the class with a , + , and the + build key used to start this build operation. + + The to use for this context. + The to use for this context. + The to use for this context. + Build key to start building. + The existing object to build up. + + + + Create a new using the explicitly provided + values. + + The to use for this context. + The to use for this context. + The set of persistent policies to use for this context. + The set of transient policies to use for this context. It is + the caller's responsibility to ensure that the transient and persistent policies are properly + combined. + Build key for this context. + Existing object to build up. + + + + Add a new set of resolver override objects to the current build operation. + + objects to add. + + + + Get a object for the given + or null if that dependency hasn't been overridden. + + Type of the dependency. + Resolver to use, or null if no override matches for the current operation. + + + + A convenience method to do a new buildup operation on an existing context. + + Key to use to build up. + Created object. + + + + A convenience method to do a new buildup operation on an existing context. This + overload allows you to specify extra policies which will be in effect for the duration + of the build. + + Key defining what to build up. + A delegate that takes a . This + is invoked with the new child context before the build up process starts. This gives callers + the opportunity to customize the context for the build process. + Created object. + + + + Gets the head of the strategy chain. + + + The strategy that's first in the chain; returns null if there are no + strategies in the chain. + + + + + Get the current build key for the current build operation. + + + + + The current object being built up or torn down. + + + The current object being manipulated by the build operation. May + be null if the object hasn't been created yet. + + + + Gets the associated with the build. + + + The associated with the build. + + + + + Gets the original build key for the build operation. + + + The original build key for the build operation. + + + + + The set of policies that were passed into this context. + + This returns the policies passed into the context. + Policies added here will remain after buildup completes. + The persistent policies for the current context. + + + + Gets the policies for the current context. + + + Any modifications will be transient (meaning, they will be forgotten when + the outer BuildUp for this context is finished executing). + + + The policies for the current context. + + + + + Gets the collection of objects + that need to execute in event of an exception. + + + + + Flag indicating if the build operation should continue. + + true means that building should not call any more + strategies, false means continue to the next strategy. + + + + An object representing what is currently being done in the + build chain. Used to report back errors if there's a failure. + + + + + The build context used to resolve a dependency during the build operation represented by this context. + + + + + Represents that a dependency could not be resolved. + + + Represents that a dependency could not be resolved. + + + + + Initializes a new instance of the class with no extra information. + + + + + Initializes a new instance of the class with the given message. + + Some random message. + + + + Initialize a new instance of the class with the given + message and inner exception. + + Some random message + Inner exception. + + + + Initializes a new instance of the class with the build key of the object begin built. + + The build key of the object begin built. + + + + Initializes a new instance of the class with serialized data. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + + The exception thrown when injection is attempted on a method + that is an open generic or has out or ref params. + + + The exception thrown when injection is attempted on a method + that is an open generic or has out or ref params. + + + + + Construct a new with no + message. + + + + + Construct a with the given message + + Message to return. + + + + Construct a with the given message + and inner exception. + + Message to return. + Inner exception + + + + Used for serialization. + + Serialization info. + Serialization context. + + + + Extension methods to provide convenience overloads over the + interface. + + + + + Start a recursive build up operation to retrieve the default + value for the given type. + + Type of object to build. + Parent context. + Resulting object. + + + + Start a recursive build up operation to retrieve the named + implementation for the given type. + + Type to resolve. + Parent context. + Name to resolve with. + The resulting object. + + + + Add a set of s to the context, specified as a + variable argument list. + + Context to add overrides to. + The overrides. + + + + Data structure that stores the set of + objects and executes them when requested. + + + + + Add a new object to this + list. + + Object to add. + + + + Execute the method + of everything in the recovery list. Recoveries will execute + in the opposite order of add - it's a stack. + + + + + Return the number of recovery objects currently in the stack. + + + + + Represents a lifetime container. + + + A lifetime container tracks the lifetime of an object, and implements + IDisposable. When the container is disposed, any objects in the + container which implement IDisposable are also disposed. + + + + + Adds an object to the lifetime container. + + The item to be added to the lifetime container. + + + + Determine if a given object is in the lifetime container. + + + The item to locate in the lifetime container. + + + Returns true if the object is contained in the lifetime + container; returns false otherwise. + + + + + Removes an item from the lifetime container. The item is + not disposed. + + The item to be removed. + + + + Gets the number of references in the lifetime container + + + The number of references in the lifetime container + + + + + Represents a lifetime container. + + + A lifetime container tracks the lifetime of an object, and implements + IDisposable. When the container is disposed, any objects in the + container which implement IDisposable are also disposed. + + + + + Adds an object to the lifetime container. + + The item to be added to the lifetime container. + + + + Determine if a given object is in the lifetime container. + + + The item to locate in the lifetime container. + + + Returns true if the object is contained in the lifetime + container; returns false otherwise. + + + + + Releases the resources used by the . + + + + + Releases the managed resources used by the DbDataReader and optionally releases the unmanaged resources. + + + true to release managed and unmanaged resources; false to release only unmanaged resources. + + + + + Returns an enumerator that iterates through the lifetime container. + + + An object that can be used to iterate through the life time container. + + + + + Returns an enumerator that iterates through the lifetime container. + + + An object that can be used to iterate through the life time container. + + + + + Removes an item from the lifetime container. The item is + not disposed. + + The item to be removed. + + + + Gets the number of references in the lifetime container + + + The number of references in the lifetime container + + + + + A custom collection over objects. + + + + + Removes an individual policy type for a build key. + + The type of policy to remove. + The key the policy applies. + + + + Removes all policies from the list. + + + + + Removes a default policy. + + The type the policy was registered as. + + + + Gets an individual policy. + + The interface the policy is registered under. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy list in the chain that the searched for policy was found in, null if the policy was + not found. + The policy in the list, if present; returns null otherwise. + + + + Get the non default policy. + + The interface the policy is registered under. + The key the policy applies to. + True if the search should be in the local policy list only; otherwise false to search up the parent chain. + The policy list in the chain that the searched for policy was found in, null if the policy was + not found. + The policy in the list if present; returns null otherwise. + + + + Sets an individual policy. + + The of the policy. + The policy to be registered. + The key the policy applies. + + + + Sets a default policy. When checking for a policy, if no specific individual policy + is available, the default will be used. + + The interface to register the policy under. + The default policy to be registered. + + + + A custom collection wrapper over objects. + + + + + Initialize a new instance of a class. + + + + + Initialize a new instance of a class with another policy list. + + An inner policy list to search. + + + + Removes an individual policy type for a build key. + + The type of policy to remove. + The key the policy applies. + + + + Removes all policies from the list. + + + + + Removes a default policy. + + The type the policy was registered as. + + + + Gets an individual policy. + + The interface the policy is registered under. + The key the policy applies. + true if the policy searches local only; otherwise false to seach up the parent chain. + The policy list in the chain that the searched for policy was found in, null if the policy was + not found. + The policy in the list, if present; returns null otherwise. + + + + Get the non default policy. + + The interface the policy is registered under. + The key the policy applies to. + True if the search should be in the local policy list only; otherwise false to search up the parent chain. + The policy list in the chain that the searched for policy was found in, null if the policy was + not found. + The policy in the list if present; returns null otherwise. + + + + Sets an individual policy. + + The of the policy. + The policy to be registered. + The key the policy applies. + + + + Sets a default policy. When checking for a policy, if no specific individual policy + is available, the default will be used. + + The interface to register the policy under. + The default policy to be registered. + + + + Gets the number of items in the locator. + + + The number of items in the locator. + + + + + An implementation of . + + + + + Add a new object to this + list. + + Object to add. + + + + Execute the method + of everything in the recovery list. Recoveries will execute + in the opposite order of add - it's a stack. + + + + + Return the number of recovery objects currently in the stack. + + + + + Implementation of which will notify an object about + the completion of a BuildUp operation, or start of a TearDown operation. + + + This strategy checks the object that is passing through the builder chain to see if it + implements IBuilderAware and if it does, it will call + and . This strategy is meant to be used from the + stage. + + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + Called during the chain of responsibility for a teardown operation. The + PreTearDown method is called when the chain is being executed in the + forward direction. + + Context of the teardown operation. + + + + Implemented on a class when it wants to receive notifications + about the build process. + + + + + Called by the when the object is being built up. + + The key of the object that was just built up. + + + + Called by the when the object is being torn down. + + + + + Enumeration to represent the object builder stages. + + + The order of the values in the enumeration is the order in which the stages are run. + + + + + Strategies in this stage run before creation. Typical work done in this stage might + include strategies that use reflection to set policies into the context that other + strategies would later use. + + + + + Strategies in this stage create objects. Typically you will only have a single policy-driven + creation strategy in this stage. + + + + + Strategies in this stage work on created objects. Typical work done in this stage might + include setter injection and method calls. + + + + + Strategies in this stage work on objects that are already initialized. Typical work done in + this stage might include looking to see if the object implements some notification interface + to discover when its initialization stage has been completed. + + + + + Represents a builder policy for mapping build keys. + + + + + Represents a builder policy for mapping build keys. + + + + + Maps the build key. + + The build key to map. + Current build context. Used for contextual information + if writing a more sophisticated mapping. This parameter can be null + (called when getting container registrations). + The new build key. + + + + Initialize a new instance of the with the new build key. + + The new build key. + + + + Maps the build key. + + The build key to map. + Current build context. Used for contextual information + if writing a more sophisticated mapping, unused in this implementation. + The new build key. + + + + Represents a strategy for mapping build keys in the build up operation. + + + + + Called during the chain of responsibility for a build operation. Looks for the + and if found maps the build key for the current operation. + + The context for the operation. + + + + An implementation of that can map + generic types. + + + + + Create a new instance + that will map generic types. + + Build key to map to. This must be or contain an open generic type. + + + + Maps the build key. + + The build key to map. + Current build context. Used for contextual information + if writing a more sophisticated mapping. + The new build key. + + + + A that will look for a build plan + in the current context. If it exists, it invokes it, otherwise + it creates one and stores it for later, and invokes it. + + + + + Called during the chain of responsibility for a build operation. + + The context for the operation. + + + + An implementation of that chooses + constructors based on these criteria: first, pick a constructor marked with the + attribute. If there + isn't one, then choose the constructor with the longest parameter list. If that is ambiguous, + then throw. + + Thrown when the constructor to choose is ambiguous. + Attribute used to mark the constructor to call. + + + + Base class that provides an implementation of + which lets you override how the parameter resolvers are created. + + + + + A that, when implemented, + will determine which constructor to call from the build plan. + + + + + Choose the constructor to call for the given type. + + Current build context + The to add any + generated resolver objects into. + The chosen constructor. + + + + Choose the constructor to call for the given type. + + Current build context + The to add any + generated resolver objects into. + The chosen constructor. + + + + Create a instance for the given + . + + Parameter to create the resolver for. + The resolver object. + + + + Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other. + + + + Value Condition Less than zerox is less than y.Zerox equals y.Greater than zerox is greater than y. + + + The second object to compare. + The first object to compare. + + + + Create a instance for the given + . + + Parameter to create the resolver for. + The resolver object. + + + + Objects of this type are the return value from . + It encapsulates the desired with the string keys + needed to look up the for each + parameter. + + + + + Base class for return values from selector policies that + return a memberinfo of some sort plus a list of parameter + keys to look up the parameter resolvers. + + + + + Base class for return of selector policies that need + to keep track of a set of parameter keys. + + + + + Add a new parameter key to this object. Keys are assumed + to be in the order of the parameters to the constructor. + + Key for the next parameter to look up. + + + + The set of keys for the constructor parameters. + + + + + Construct a new , storing + the given member info. + + Member info to store. + + + + The member info stored. + + + + + Create a new instance which + contains the given constructor. + + The constructor to wrap. + + + + The constructor this object wraps. + + + + + This class records the information about which constructor argument is currently + being resolved, and is responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + The type that is being constructed. + A string representing the constructor being called. + Parameter being resolved. + + + + Generate the string describing what parameter was being resolved. + + The description string. + + + + String describing the constructor being set up. + + + + + Parameter that's being resolved. + + + + + A that emits IL to call constructors + as part of creating a build plan. + + + + + Called during the chain of responsibility for a build operation. + + Existing object is an instance of . + The context for the operation. + + + + A helper method used by the generated IL to throw an exception if + a dependency cannot be resolved. + + The currently being + used for the build of this object. + + + + A helper method used by the generated IL to throw an exception if + a dependency cannot be resolved because of an invalid constructor. + + The currently being + used for the build of this object. + The signature of the invalid constructor. + + + + A helper method used by the generated IL to throw an exception if + no existing object is present, but the user is attempting to build + an interface (usually due to the lack of a type mapping). + + The currently being + used for the build of this object. + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + A helper method used by the generated IL to set up a PerResolveLifetimeManager lifetime manager + if the current object is such. + + Current build context. + + + + A class that records that a constructor is about to be call, and is + responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + + + + Generate the description string. + + The string. + + + + Constructor we're trying to call. + + + + + An implementation of that will + check for full trust and if we're building a class or an interface. If in full + trust, attach to the class or module of the interface respectively. If in partial + trust, attach to the OB2 module instead. + + + + + This interface defines a policy that manages creation of the dynamic methods + used by the ObjectBuilder code generation. This way, we can replace the details + of how the dynamic method is created to handle differences in CLR (like Silverlight + vs desktop) or security policies. + + + + + Create a builder method for the given type, using the given name. + + Type that will be built by the generated method. + Name to give to the method. + A object with the proper signature to use + as part of a build plan. + + + + Create a builder method for the given type, using the given name. + + Type that will be built by the generated method. + Name to give to the method. + A object with the proper signature to use + as part of a build plan. + + + + This object tracks the current state of the build plan generation, + accumulates the IL, provides the preamble & postamble for the dynamic + method, and tracks things like local variables in the generated IL + so that they can be reused across IL generation strategies. + + + + + Create a that is initialized + to handle creation of a dynamic method to build the given type. + + Type that we're trying to create a build plan for. + An object that actually + creates our object. + + + + Completes generation of the dynamic method and returns the + generated dynamic method delegate. + + The created + + + + Emit the IL to put the build context on top of the IL stack. + + + + + Emit the IL to put the current build key on top of the IL stack. + + + + + Emit the IL to put the current "existing" object on the top of the IL stack. + + + + + Emit the IL to make the top of the IL stack our current "existing" object. + + + + + Emit the IL to load the given object onto the top of the IL stack. + + Type to load on the stack. + + + + Emit the IL needed to look up an and + call it to get a value. + + Type of the dependency to resolve. + Key to look up the policy by. + + + + Emit the IL needed to clear the . + + + + + Emit the IL needed to either cast the top of the stack to the target type + or unbox it, if it's a value type. + + Type to convert the top of the stack to. + + + + A helper method used by the generated IL to clear the current operation in the build context. + + + + + Helper method used by generated IL to look up a dependency resolver based on the given key. + + Current build context. + Type of the dependency being resolved. + Key the resolver was stored under. + The found dependency resolver. + + + + A reflection helper method to make it easier to grab a property getter + for the given property. + + Type that implements the property we want. + Type of the property. + Name of the property. + The property getter's . + + + + A reflection helper method that makes it easier to grab a + for a method. + + Type that implements the method we want. + Name of the method. + Types of arguments to the method. + The method's . + + + + The underlying that can be used to + emit IL into the generated dynamic method. + + + + + The type we're currently creating the method to build. + + + + + A delegate type that defines the signature of the + dynamic method created by the build plans. + + used to build up the object. + + + + An implementation of that runs the + given delegate to execute the plan. + + + + + An implementation + that constructs a build plan via dynamic IL emission. + + + + + A that can create and return an + for the given build key. + + + + + Create a build plan using the given context and build key. + + Current build context. + Current build key. + The build plan. + + + + Construct a that + uses the given strategy chain to construct the build plan. + + The strategy chain. + + + + Construct a build plan. + + The current build context. + The current build key. + The created build plan. + + + + A class that records that a constructor is about to be call, and is + responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + + + + Generate the description string. + + The string. + + + + Method we're trying to call. + + + + + This class records the information about which constructor argument is currently + being resolved, and is responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + The type that is being constructed. + A string representing the method being called. + Parameter being resolved. + + + + Generate the string describing what parameter was being resolved. + + The description string. + + + + String describing the method being set up. + + + + + Parameter that's being resolved. + + + + + A that generates IL to call + chosen methods (as specified by the current ) + as part of object build up. + + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + A base class that holds the information shared by all operations + performed by the container while setting properties. + + + + + Initializes a new instance of the class. + + + + + Generate the description of this operation. + + The string. + + + + Get a format string used to create the description. Called by + the base method. + + The format string. + + + + The property value currently being resolved. + + + + + This class records the information about which property value is currently + being resolved, and is responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + + + + Get a format string used to create the description. Called by + the base method. + + The format string. + + + + A that generates IL to resolve properties + on an object being built. + + + + + Called during the chain of responsibility for a build operation. + + The context for the operation. + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + A helper method used by the generated IL to store the current operation in the build context. + + + + + This class records the information about which property value is currently + being set, and is responsible for generating the error string required when + an error has occurred. + + + + + Initializes a new instance of the class. + + Type property is on. + Name of property being set. + + + + Get a format string used to create the description. Called by + the base method. + + The format string. + + + + Creates an instance of this build plan's type, or fills + in the existing type if passed in. + + Context used to build up the object. + + + + An that will examine the given + types and return a sequence of objects + that should be called as part of building the object. + + + + + Return the sequence of methods to call while building the target object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of methods to call. + + + + An implementation of that selects + methods by looking for the given + attribute on those methods. + + Type of attribute used to mark methods + to inject. + + + + Base class that provides an implementation of + which lets you override how the parameter resolvers are created. + + Attribute that marks methods that should + be called. + + + + Return the sequence of methods to call while building the target object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of methods to call. + + + + Create a instance for the given + . + + Parameter to create the resolver for. + The resolver object. + + + + Create a instance for the given + . + + Parameter to create the resolver for. + The resolver object. + + + + Objects of this type are the return value from . + It encapsulates the desired with the string keys + needed to look up the for each + parameter. + + + + + Create a new instance which + contains the given method. + + The method + + + + The constructor this object wraps. + + + + + An that returns a sequence + of properties that should be injected for the given type. + + + + + Returns sequence of properties on the given type that + should be set as part of building that object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of objects + that contain the properties to set. + + + + Base class that provides an implementation of + which lets you override how the parameter resolvers are created. + + + + + Returns sequence of properties on the given type that + should be set as part of building that object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of objects + that contain the properties to set. + + + + Create a for the given + property. + + Property to create resolver for. + The resolver object. + + + + An implementation of that looks + for properties marked with the + attribute that are also settable and not indexers. + + + + + + Create a for the given + property. + + Property to create resolver for. + The resolver object. + + + + Objects of this type are returned from + . + This class combines the about + the property with the string key used to look up the resolver + for this property's value. + + + + + Create an instance of + with the given and key. + + The property. + Key to use to look up the resolver. + + + + PropertyInfo for this property. + + + + + Key to look up this property's resolver. + + + + + Implementation of . + + + + + A builder policy that lets you keep track of the current + resolvers and will remove them from the given policy set. + + + + + Add a new resolver to track by key. + + Key that was used to add the resolver to the policy set. + + + + Remove the currently tracked resolvers from the given policy list. + + Policy list to remove the resolvers from. + + + + Add a new resolver to track by key. + + Key that was used to add the resolver to the policy set. + + + + Remove the currently tracked resolvers from the given policy list. + + Policy list to remove the resolvers from. + + + + Get an instance that implements , + either the current one in the policy set or creating a new one if it doesn't + exist. + + Policy list to look up from. + Build key to track. + The resolver tracker. + + + + Add a key to be tracked to the current tracker. + + Policy list containing the resolvers and trackers. + Build key for the resolvers being tracked. + Key for the resolver. + + + + Remove the resolvers for the given build key. + + Policy list containing the build key. + Build key. + + + + An implementation of that + calls back into the build chain to build up the dependency, passing + a type given at compile time as its build key. + + + + + Create a new instance storing the given type. + + Type to resolve. + + + + Get the value for a dependency. + + Current build context. + The value for the dependency. + + + + This interface defines a standard method to convert any + regardless + of the stage enum into a regular, flat strategy chain. + + + + + Convert this into + a flat . + + The flattened . + + + + Represents a chain of responsibility for builder strategies. + + + + + Reverse the order of the strategy chain. + + The reversed strategy chain. + + + + Execute this strategy chain against the given context, + calling the Buildup methods on the strategies. + + Context for the build process. + The build up object + + + + Execute this strategy chain against the given context, + calling the TearDown methods on the strategies. + + Context for the teardown process. + + + + A builder policy used to create lifetime policy instances. + Used by the LifetimeStrategy when instantiating open + generic types. + + + + + Create a new instance of . + + The new instance. + + + + The type of Lifetime manager that will be created by this factory. + + + + + An implementation that uses + a to figure out if an object + has already been created and to update or remove that + object from some backing store. + + + + + Called during the chain of responsibility for a build operation. The + PreBuildUp method is called when the chain is being executed in the + forward direction. + + Context of the build operation. + + + + Called during the chain of responsibility for a build operation. The + PostBuildUp method is called when the chain has finished the PreBuildUp + phase and executes in reverse order from the PreBuildUp calls. + + Context of the build operation. + + + + Represents a chain of responsibility for builder strategies partitioned by stages. + + The stage enumeration to partition the strategies. + + + + Initialize a new instance of the class. + + + + + Initialize a new instance of the class with an inner strategy chain to use when building. + + The inner strategy chain to use first when finding strategies in the build operation. + + + + Adds a strategy to the chain at a particular stage. + + The strategy to add to the chain. + The stage to add the strategy. + + + + Add a new strategy for the . + + The of + The stage to add the strategy. + + + + Clear the current strategy chain list. + + + This will not clear the inner strategy chain if this instane was created with one. + + + + + Makes a strategy chain based on this instance. + + A new . + + + + Represents a chain of responsibility for builder strategies. + + + + + Initialzie a new instance of the class. + + + + + Initialzie a new instance of the class with a colleciton of strategies. + + A collection of strategies to initialize the chain. + + + + Adds a strategy to the chain. + + The strategy to add to the chain. + + + + Adds strategies to the chain. + + The strategies to add to the chain. + + + + Reverse the order of the strategy chain. + + The reversed strategy chain. + + + + Execute this strategy chain against the given context to build up. + + Context for the build processes. + The build up object + + + + Execute this strategy chain against the given context, + calling the TearDown methods on the strategies. + + Context for the teardown process. + + + + Returns an enumerator that iterates through the collection. + + + + A that can be used to iterate through the collection. + + 1 + + + + Returns an enumerator that iterates through a collection. + + + + An object that can be used to iterate through the collection. + + 2 + + + + Build key used to combine a type object with a string name. Used by + ObjectBuilder to indicate exactly what is being built. + + + + + Create a new instance with the given + type and name. + + to build. + Key to use to look up type mappings and singletons. + + + + Create a new instance for the default + buildup of the given type. + + to build. + + + + This helper method creates a new instance. It is + initialized for the default key for the given type. + + Type to build. + A new instance. + + + + This helper method creates a new instance for + the given type and key. + + Type to build + Key to use to look up type mappings and singletons. + A new instance initialized with the given type and name. + + + + Compare two instances. + + Two instances compare equal + if they contain the same name and the same type. Also, comparing + against a different type will also return false. + Object to compare to. + True if the two keys are equal, false if not. + + + + Calculate a hash code for this instance. + + A hash code. + + + + Compare two instances for equality. + + Two instances compare equal + if they contain the same name and the same type. + First of the two keys to compare. + Second of the two keys to compare. + True if the values of the keys are the same, else false. + + + + Compare two instances for inequality. + + Two instances compare equal + if they contain the same name and the same type. If either field differs + the keys are not equal. + First of the two keys to compare. + Second of the two keys to compare. + false if the values of the keys are the same, else true. + + + + Formats the build key as a string (primarily for debugging). + + A readable string representation of the build key. + + + + Return the stored in this build key. + + The type to build. + + + + Returns the name stored in this build key. + + The name to use when building. + + + + A generic version of so that + you can new up a key using generic syntax. + + Type for the key. + + + + Construct a new that + specifies the given type. + + + + + Construct a new that + specifies the given type and name. + + Name for the key. + + + + A series of helper methods to deal with sequences - + objects that implement . + + + + + A function that turns an arbitrary parameter list into an + . + + Type of arguments. + The items to put into the collection. + An array that contains the values of the . + + + + Given two sequences, return a new sequence containing the corresponding values + from each one. + + Type of first sequence. + Type of second sequence. + First sequence of items. + Second sequence of items. + New sequence of pairs. This sequence ends when the shorter of sequence1 and sequence2 does. + + + + The exception thrown by the Unity container when + an attempt to resolve a dependency fails. + + + The exception thrown by the Unity container when + an attempt to resolve a dependency fails. + + + + + Constructor to create a from serialized state. + + Serialization info + Serialization context + + + + Serialize this object into the given context. + + Serialization info + Streaming context + + + + Create a new that records + the exception for the given type and name. + + Type requested from the container. + Name requested from the container. + The actual exception that caused the failure of the build. + The build context representing the failed operation. + + + + The type that was being requested from the container at the time of failure. + + + + + The name that was being requested from the container at the time of failure. + + + + + A that lets you register a + delegate with the container to create an object, rather than calling + the object's constructor. + + + + + Base class for all extension objects. + + + + + The container calls this method when the extension is added. + + A instance that gives the + extension access to the internals of the container. + + + + Initial the container with this extension's functionality. + + + When overridden in a derived class, this method will modify the given + by adding strategies, policies, etc. to + install it's functions into the container. + + + + Removes the extension's functions from the container. + + + + This method is called when extensions are being removed from the container. It can be + used to do things like disconnect event handlers or clean up member state. You do not + need to remove strategies or policies here; the container will do that automatically. + + + The default implementation of this method does nothing. + + + + + The container this extension has been added to. + + The that this extension has been added to. + + + + The object used to manipulate + the inner state of the container. + + + + + Initialize this extension. This particular extension requires no + initialization work. + + + + + Register the given factory delegate to be called when the container is + asked to resolve and . + + Type that will be requested from the container. + The name that will be used when requesting to resolve this type. + Delegate to invoke to create the instance. + The container extension object this method was invoked on. + + + + Register the given factory delegate to be called when the container is + asked to resolve . + + Type that will be requested from the container. + Delegate to invoke to create the instance. + The container extension object this method was invoked on. + + + + An implementation of that + acts as a decorator over another . + This checks to see if the current type being built is the + right one before checking the inner . + + + + + Create an instance of + + Type to check for. + Inner override to check after type matches. + + + + Return a that can be used to give a value + for the given desired dependency. + + Current build context. + Type of dependency desired. + a object if this override applies, null if not. + + + + A convenience version of that lets you + specify the type to construct via generics syntax. + + Type to check for. + + + + Create an instance of . + + Inner override to check after type matches. + + + + Extension class that adds a set of convenience overloads to the + interface. + + + + + Register a type with specific members to be injected. + + Type this registration is for. + Container to configure. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container. + + + + This method is used to tell the container that when asked for type , + actually return an instance of type . This is very useful for + getting instances of interfaces. + + + This overload registers a default mapping and transient lifetime. + + + that will be requested. + that will actually be returned. + Container to configure. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container, where the created instances will use + the given . + + that will be requested. + that will actually be returned. + Container to configure. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container. + + + This method is used to tell the container that when asked for type , + actually return an instance of type . This is very useful for + getting instances of interfaces. + + that will be requested. + that will actually be returned. + Container to configure. + Name of this mapping. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container, where the created instances will use + the given . + + that will be requested. + that will actually be returned. + Container to configure. + Name to use for registration, null if a default registration. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type with the container. + No type mapping is performed for this type. + + The type to apply the to. + Container to configure. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type with the container. + No type mapping is performed for this type. + + The type to configure injection on. + Container to configure. + Name that will be used to request the type. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type and name with the container. + No type mapping is performed for this type. + + The type to apply the to. + Container to configure. + Name that will be used to request the type. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type with specific members to be injected. + + Container to configure. + Type this registration is for. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container. + + + + This method is used to tell the container that when asked for type , + actually return an instance of type . This is very useful for + getting instances of interfaces. + + + This overload registers a default mapping. + + + Container to configure. + that will be requested. + that will actually be returned. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container. + + + This method is used to tell the container that when asked for type , + actually return an instance of type . This is very useful for + getting instances of interfaces. + + Container to configure. + that will be requested. + that will actually be returned. + Name to use for registration, null if a default registration. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a type mapping with the container, where the created instances will use + the given . + + Container to configure. + that will be requested. + that will actually be returned. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type and name with the container. + No type mapping is performed for this type. + + Container to configure. + The to apply the to. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type and name with the container. + No type mapping is performed for this type. + + Container to configure. + The to configure in the container. + Name to use for registration, null if a default registration. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register a for the given type and name with the container. + No type mapping is performed for this type. + + Container to configure. + The to apply the to. + Name to use for registration, null if a default registration. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload does a default registration and has the container take over the lifetime of the instance. + + Type of instance to register (may be an implemented interface instead of the full type). + Container to configure. + Object to returned. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload does a default registration (name = null). + + + Type of instance to register (may be an implemented interface instead of the full type). + Container to configure. + Object to returned. + + object that controls how this instance will be managed by the container. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload automatically has the container take ownership of the . + + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + Container to configure. + Name for registration. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + Container to configure. + Name for registration. + + object that controls how this instance will be managed by the container. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload does a default registration and has the container take over the lifetime of the instance. + + Container to configure. + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload does a default registration (name = null). + + + Container to configure. + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + + object that controls how this instance will be managed by the container. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + This overload automatically has the container take ownership of the . + + Container to configure. + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + Name for registration. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Resolve an instance of the default requested type from the container. + + of object to get from the container. + Container to resolve from. + Any overrides for the resolve call. + The retrieved object. + + + + Resolve an instance of the requested type with the given name from the container. + + of object to get from the container. + Container to resolve from. + Name of the object to retrieve. + Any overrides for the resolve call. + The retrieved object. + + + + Resolve an instance of the default requested type from the container. + + Container to resolve from. + of object to get from the container. + Any overrides for the resolve call. + The retrieved object. + + + + Return instances of all registered types requested. + + + + This method is useful if you've registered multiple types with the same + but different names. + + + Be aware that this method does NOT return an instance for the default (unnamed) registration. + + + The type requested. + Container to resolve from. + Any overrides for the resolve calls. + Set of objects of type . + + + + Run an existing object through the container and perform injection on it. + + + + This method is useful when you don't control the construction of an + instance (ASP.NET pages or objects created via XAML, for instance) + but you still want properties and other injection performed. + + + This overload uses the default registrations. + + + of object to perform injection on. + Container to resolve through. + Instance to build up. + Any overrides for the buildup. + The resulting object. By default, this will be , but + container extensions may add things like automatic proxy creation which would + cause this to return a different object (but still type compatible with ). + + + + Run an existing object through the container and perform injection on it. + + + + This method is useful when you don't control the construction of an + instance (ASP.NET pages or objects created via XAML, for instance) + but you still want properties and other injection performed. + + of object to perform injection on. + Conatiner to resolve through. + Instance to build up. + name to use when looking up the typemappings and other configurations. + Any overrides for the Buildup. + The resulting object. By default, this will be , but + container extensions may add things like automatic proxy creation which would + cause this to return a different object (but still type compatible with ). + + + + Run an existing object through the container and perform injection on it. + + + + This method is useful when you don't control the construction of an + instance (ASP.NET pages or objects created via XAML, for instance) + but you still want properties and other injection performed. + + + This overload uses the default registrations. + + + Container to resolve through. + of object to perform injection on. + Instance to build up. + Any overrides for the Buildup. + The resulting object. By default, this will be , but + container extensions may add things like automatic proxy creation which would + cause this to return a different object (but still type compatible with ). + + + + Creates a new extension object and adds it to the container. + + Type of to add. The extension type + will be resolved from within the supplied . + Container to add the extension to. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Resolve access to a configuration interface exposed by an extension. + + Extensions can expose configuration interfaces as well as adding + strategies and policies to the container. This method walks the list of + added extensions and returns the first one that implements the requested type. + + The configuration interface required. + Container to configure. + The requested extension's configuration interface, or null if not found. + + + + Check if a particular type has been registered with the container with + the default name. + + Container to inspect. + Type to check registration for. + True if this type has been registered, false if not. + + + + Check if a particular type/name pair has been registered with the container. + + Container to inspect. + Type to check registration for. + Name to check registration for. + True if this type/name pair has been registered, false if not. + + + + Check if a particular type has been registered with the container with the default name. + + Type to check registration for. + Container to inspect. + True if this type has been registered, false if not. + + + + Check if a particular type/name pair has been registered with the container. + + Type to check registration for. + Container to inspect. + Name to check registration for. + True if this type/name pair has been registered, false if not. + + + + This extension installs the default strategies and policies into the container + to implement the standard behavior of the Unity container. + + + This extension installs the default strategies and policies into the container + to implement the standard behavior of the Unity container. + + + + + Add the correct to the policy + set. This version adds the appropriate policy for running on the desktop CLR. + + + + + Add the default ObjectBuilder strategies & policies to the container. + + + + + The class provides the means for extension objects + to manipulate the internal state of the . + + + + + Store a type/name pair for later resolution. + + + + When users register type mappings (or other things) with a named key, this method + allows you to register that name with the container so that when the + method is called, that name is included in the list that is returned. + + to register. + Name assocated with that type. + + + + The container that this context is associated with. + + The object. + + + + The strategies this container uses. + + The that the container uses to build objects. + + + + The strategies this container uses to construct build plans. + + The that this container uses when creating + build plans. + + + + The policies this container uses. + + The the that container uses to build objects. + + + + The that this container uses. + + The is used to manage objects that the container is managing. + + + + This event is raised when the method, + or one of its overloads, is called. + + + + + This event is raised when the method, + or one of its overloads, is called. + + + + + This event is raised when the method is called, providing + the newly created child container to extensions to act on as they see fit. + + + + + An EventArgs class that holds a string Name. + + + + + Create a new with a null name. + + + + + Create a new with the given name. + + Name to store. + + + + The name. + + Name used for this event arg object. + + + + Event argument class for the event. + + + + + Create a new instance of . + + Type to map from. + Type to map to. + Name for the registration. + to manage instances. + + + + Type to map from. + + + + + Type to map to. + + + + + to manage instances. + + + + + Event argument class for the event. + + + + + Create a default instance. + + + + + Create a instance initialized with the given arguments. + + Type of instance being registered. + The instance object itself. + Name to register under, null if default registration. + object that handles how + the instance will be owned. + + + + Type of instance being registered. + + + Type of instance being registered. + + + + + Instance object being registered. + + Instance object being registered + + + + that controls ownership of + this instance. + + + + + A that lets you specify that + an instance of a generic type parameter should be resolved. + + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + name to use when looking up in the container. + + + + Return a instance that will + return this types value for the parameter. + + The actual type to resolve. + The resolution key. + The . + + + + A that lets you specify that + an array containing the registered instances of a generic type parameter + should be resolved. + + + + + Create a new instance that specifies + that the given named generic parameter should be resolved. + + The generic parameter name to resolve. + The values for the elements, that will + be converted to objects. + + + + Test to see if this parameter value has a matching type for the given type. + + Type to check. + True if this parameter value is compatible with type , + false if not. + A type is considered compatible if it is an array type of rank one + and its element type is a generic type parameter with a name matching this generic + parameter name configured for the receiver. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + Name for the type represented by this . + This may be an actual type name or a generic argument name. + + + + + A Unity container extension that allows you to configure + which constructors, properties, and methods get injected + via an API rather than through attributes. + + + + + Initial the container with this extension's functionality. + + + When overridden in a derived class, this method will modify the given + by adding strategies, policies, etc. to + install it's functions into the container. + + + + API to configure the injection settings for a particular type. + + Type the injection is being configured for. + Objects containing the details on which members to inject and how. + This extension object. + + + + API to configure the injection settings for a particular type/name pair. + + Type the injection is being configured for. + Name of registration + Objects containing the details on which members to inject and how. + This extension object. + + + + API to configure the injection settings for a particular type. + + Type to configure. + Objects containing the details on which members to inject and how. + This extension object. + + + + API to configure the injection settings for a particular type/name pair. + + Type to configure. + Name of registration. + Objects containing the details on which members to inject and how. + This extension object. + + + + API to configure the injection settings for a particular type/name pair. + + Type of interface/base class being registered (may be null). + Type of actual implementation class being registered. + Name of registration. + Objects containing the details on which members to inject and how. + This extension object. + + + + A class that holds the collection of information + for a constructor, so that the container can + be configured to call this constructor. + + + + + Create a new instance of that looks + for a constructor with the given set of parameters. + + The values for the parameters, that will + be converted to objects. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Interface registered, ignored in this implementation. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + An that configures the + container to call a method as part of buildup. + + + + + Create a new instance which will configure + the container to call the given methods with the given parameters. + + Name of the method to call. + Parameter values for the method. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Type of interface registered, ignored in this implementation. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + A small function to handle name matching. You can override this + to do things like case insensitive comparisons. + + MethodInfo for the method you're checking. + Name of the method you're looking for. + True if a match, false if not. + + + + A class that holds on to the given value and provides + the required + when the container is configured. + + + + + Create an instance of that stores + the given value, using the runtime type of that value as the + type of the parameter. + + Value to be injected for this parameter. + + + + Create an instance of that stores + the given value, associated with the given type. + + Type of the parameter. + Value of the parameter + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + A generic version of that makes it a + little easier to specify the type of the parameter. + + Type of parameter. + + + + Create a new . + + Value for the parameter. + + + + This class stores information about which properties to inject, + and will configure the container accordingly. + + + + + Configure the container to inject the given property name, + resolving the value via the container. + + Name of the property to inject. + + + + Configure the container to inject the given property name, + using the value supplied. This value is converted to an + object using the + rules defined by the + method. + + Name of property to inject. + Value for property. + + + + Add policies to the to configure the + container to call this constructor with the appropriate parameter values. + + Interface being registered, ignored in this implemenation. + Type to register. + Name used to resolve the type object. + Policy list to add policies to. + + + + A class that stores a type, and generates a + resolver object that resolves all the named instances or the + type registered in a container. + + + + + Construct a new that + resolves to the given element type and collection of element values. + + The type of elements to resolve. + The values for the elements, that will + be converted to objects. + + + + Construct a new that + resolves to the given array and element types and collection of element values. + + The type for the array of elements to resolve. + The type of elements to resolve. + The values for the elements, that will + be converted to objects. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + A generic version of for convenience + when creating them by hand. + + Type of the elements for the array of the parameter. + + + + Construct a new that + resolves to the given element generic type with the given element values. + + The values for the elements, that will + be converted to objects. + + + + Interface defining the behavior of the Unity dependency injection container. + + + + + Register a type mapping with the container, where the created instances will use + the given . + + that will be requested. + that will actually be returned. + Name to use for registration, null if a default registration. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Register an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + Name for registration. + + object that controls how this instance will be managed by the container. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Resolve an instance of the requested type with the given name from the container. + + of object to get from the container. + Name of the object to retrieve. + Any overrides for the resolve call. + The retrieved object. + + + + Return instances of all registered types requested. + + + + This method is useful if you've registered multiple types with the same + but different names. + + + Be aware that this method does NOT return an instance for the default (unnamed) registration. + + + The type requested. + Any overrides for the resolve calls. + Set of objects of type . + + + + Run an existing object through the container and perform injection on it. + + + + This method is useful when you don't control the construction of an + instance (ASP.NET pages or objects created via XAML, for instance) + but you still want properties and other injection performed. + + of object to perform injection on. + Instance to build up. + name to use when looking up the typemappings and other configurations. + Any overrides for the resolve calls. + The resulting object. By default, this will be , but + container extensions may add things like automatic proxy creation which would + cause this to return a different object (but still type compatible with ). + + + + Run an existing object through the container, and clean it up. + + The object to tear down. + + + + Add an extension object to the container. + + to add. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Resolve access to a configuration interface exposed by an extension. + + Extensions can expose configuration interfaces as well as adding + strategies and policies to the container. This method walks the list of + added extensions and returns the first one that implements the requested type. + + of configuration interface required. + The requested extension's configuration interface, or null if not found. + + + + Remove all installed extensions from this container. + + + + This method removes all extensions from the container, including the default ones + that implement the out-of-the-box behavior. After this method, if you want to use + the container again you will need to either readd the default extensions or replace + them with your own. + + + The registered instances and singletons that have already been set up in this container + do not get removed. + + + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Create a child container. + + + A child container shares the parent's configuration, but can be configured with different + settings or lifetime. + The new child container. + + + + The parent of this container. + + The parent container, or null if this container doesn't have one. + + + + Get a sequence of that describe the current state + of the container. + + + + + A that holds a weak reference to + it's managed instance. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. + + The object being stored. + + + + Remove the given object from backing store. + + + + + An implementation of that + creates instances of the type of the given Lifetime Manager + by resolving them through the container. + + + + + Create a new that will + return instances of the given type, creating them by + resolving through the container. + + Container to resolve with. + Type of LifetimeManager to create. + + + + Create a new instance of . + + The new instance. + + + + The type of Lifetime manager that will be created by this factory. + + + + + A that holds the instances given to it, + keeping one instance per thread. + + + + This LifetimeManager does not dispose the instances it holds. + + + + + + Initializes a new instance of the class. + + + + + Retrieve a value from the backing store associated with this Lifetime policy for the + current thread. + + the object desired, or if no such object is currently + stored for the current thread. + + + + Stores the given value into backing store for retrieval later when requested + in the current thread. + + The object being stored. + + + + Remove the given object from backing store. + + Not implemented for this lifetime manager. + + + + An implementation that does nothing, + thus ensuring that instances are created new every time. + + + + + Retrieve a value from the backing store associated with this Lifetime policy. + + the object desired, or null if no such object is currently stored. + + + + Stores the given value into backing store for retrieval later. + + The object being stored. + + + + Remove the given object from backing store. + + + + + This strategy implements the logic that will call container.ResolveAll + when an array parameter is detected. + + + + + Do the PreBuildUp stage of construction. This is where the actual work is performed. + + Current build context. + + + + An implementation of that is + aware of the build keys used by the Unity container. + + + + + Create a instance for the given + . + + + This implementation looks for the Unity on the + parameter and uses it to create an instance of + for this parameter. + Parameter to create the resolver for. + The resolver object. + + + + An implementation of that is aware + of the build keys used by the Unity container. + + + + + Create a instance for the given + . + + Parameter to create the resolver for. + The resolver object. + + + + An implementation of that is aware of + the build keys used by the unity container. + + + + + Create a for the given + property. + + Property to create resolver for. + The resolver object. + + + + A implementation that returns + the value set in the constructor. + + + + + Create a new instance of + which will return the given value when resolved. + + The value to return. + + + + Get the value for a dependency. + + Current build context. + The value for the dependency. + + + + An implementation of that stores a + type and name, and at resolution time puts them together into a + . + + + + + Create an instance of + with the given type and name. + + The type. + The name (may be null). + + + + Resolve the value for a dependency. + + Current build context. + The value for the dependency. + + + + The type that this resolver resolves. + + + + + The name that this resolver resolves. + + + + + An implementation of that resolves to + to an array populated with the values that result from resolving other instances + of . + + + + + Create an instance of + with the given type and a collection of + instances to use when populating the result. + + The type. + The resolver policies to use when populating an array. + + + + Resolve the value for a dependency. + + Current build context. + An array pupulated with the results of resolving the resolver policies. + + + + An implementation of that selects + the given constructor and creates the appropriate resolvers to call it with + the specified parameters. + + + + + Create an instance of that + will return the given constructor, being passed the given injection values + as parameters. + + The constructor to call. + Set of objects + that describes how to obtain the values for the constructor parameters. + + + + Choose the constructor to call for the given type. + + Current build context + The to add any + generated resolver objects into. + The chosen constructor. + + + + Helper class for implementing selector policies that need to + set up dependency resolver policies. + + + + + Add dependency resolvers to the parameter set. + + Type that's currently being built (used to resolve open generics). + PolicyList to add the resolvers to. + Objects supplying the dependency resolvers. + Result object to store the keys in. + + + + A implementation that calls the specific + methods with the given parameters. + + + + + Add the given method and parameter collection to the list of methods + that will be returned when the selector's + method is called. + + Method to call. + sequence of objects + that describe how to create the method parameter values. + + + + Return the sequence of methods to call while building the target object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of methods to call. + + + + An implemnetation of which returns + the set of specific properties that the selector was configured with. + + + + + Add a property that will be par of the set returned when the + is called. + + The property to set. + object describing + how to create the value to inject. + + + + Returns sequence of properties on the given type that + should be set as part of building that object. + + Current build context. + The to add any + generated resolver objects into. + Sequence of objects + that contain the properties to set. + + + + A class that stores a name and type, and generates a + resolver object that resolves the parameter via the + container. + + + + + Construct a new that + resolves to the given type. + + Type of this parameter. + + + + Construct a new that + resolves the given type and name. + + Type of this parameter. + Name to use when resolving parameter. + + + + Return a instance that will + return this types value for the parameter. + + Type that contains the member that needs this parameter. Used + to resolve open generic parameters. + The . + + + + A generic version of for convenience + when creating them by hand. + + Type of the parameter + + + + Create a new for the given + generic type and the default name. + + + + + Create a new for the given + generic type and name. + + Name to use to resolve this parameter. + + + + An implementation of that wraps a Unity container. + + + + + Initializes a new instance of the class for a container. + + The to wrap with the + interface implementation. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + When implemented by inheriting classes, this method will do the actual work of resolving + the requested service instance. + + Type of instance requested.Name of registered service you want. May be null. + + The requested service instance. + + + + + When implemented by inheriting classes, this method will do the actual work of + resolving all the requested service instances. + + Type of service requested. + + Sequence of service instance objects. + + + + + A static helper class that includes various parameter checking routines. + + + + + Throws if the given argument is null. + + if tested value if null. + Argument value to test. + Name of the argument being tested. + + + + Throws an exception if the tested string argument is null or the empty string. + + Thrown if string value is null. + Thrown if the string is empty + Argument value to check. + Name of argument being checked. + + + + Verifies that an argument type is assignable from the provided type (meaning + interfaces are implemented, or classes exist in the base class hierarchy). + + The argument type that will be assigned to. + The type of the value being assigned. + Argument name. + + + + Verifies that an argument instance is assignable from the provided type (meaning + interfaces are implemented, or classes exist in the base class hierarchy, or instance can be + assigned through a runtime wrapper, as is the case for COM Objects). + + The argument type that will be assigned to. + The instance that will be assigned. + Argument name. + + + + The build stages we use in the Unity container + strategy pipeline. + + + + + First stage. By default, nothing happens here. + + + + + Second stage. Type mapping occurs here. + + + + + Third stage. lifetime managers are checked here, + and if they're available the rest of the pipeline is skipped. + + + + + Fourth stage. Reflection over constructors, properties, etc. is + performed here. + + + + + Fifth stage. Instance creation happens here. + + + + + Sixth stage. Property sets and method injection happens here. + + + + + Seventh and final stage. By default, nothing happens here. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The type {0} has multiple constructors of length {1}. Unable to disambiguate.. + + + + + Looks up a localized string similar to The provided string argument must not be empty.. + + + + + Looks up a localized string similar to The current build operation (build key {2}) failed: {3} (Strategy type {0}, index {1}). + + + + + Looks up a localized string similar to The current type, {0}, is an interface and cannot be constructed. Are you missing a type mapping?. + + + + + Looks up a localized string similar to Cannot extract type from build key {0}.. + + + + + Looks up a localized string similar to The method {0}.{1}({2}) is an open generic method. Open generic methods cannot be injected.. + + + + + Looks up a localized string similar to The property {0} on type {1} is an indexer. Indexed properties cannot be injected.. + + + + + Looks up a localized string similar to The method {1} on type {0} has an out parameter. Injection cannot be performed.. + + + + + Looks up a localized string similar to The method {0}.{1}({2}) has at least one out parameter. Methods with out parameters cannot be injected.. + + + + + Looks up a localized string similar to The method {0}.{1}({2}) has at least one ref parameter.Methods with ref parameters cannot be injected.. + + + + + Looks up a localized string similar to The method {1} on type {0} is marked for injection, but it is an open generic method. Injection cannot be performed.. + + + + + Looks up a localized string similar to The method {0}.{1}({2}) is static. Static methods cannot be injected.. + + + + + Looks up a localized string similar to The type {0} is an open generic type. An open generic type cannot be resolved.. + + + + + Looks up a localized string similar to Resolving parameter "{0}" of constructor {1}. + + + + + Looks up a localized string similar to The parameter {0} could not be resolved when attempting to call constructor {1}.. + + + + + Looks up a localized string similar to Parameter type inference does not work for null values. Indicate the parameter type explicitly using a properly configured instance of the InjectionParameter or InjectionParameter<T> classes.. + + + + + Looks up a localized string similar to Calling constructor {0}. + + + + + Looks up a localized string similar to Calling method {0}.{1}. + + + + + Looks up a localized string similar to An item with the given key is already present in the dictionary.. + + + + + Looks up a localized string similar to The lifetime manager is already registered. Lifetime managers cannot be reused, please create a new one.. + + + + + Looks up a localized string similar to The override marker build plan policy has been invoked. This should never happen, looks like a bug in the container.. + + + + + Looks up a localized string similar to Resolving parameter "{0}" of method {1}.{2}. + + + + + Looks up a localized string similar to The value for parameter "{1}" of method {0} could not be resolved. . + + + + + Looks up a localized string similar to Could not resolve dependency for build key {0}.. + + + + + Looks up a localized string similar to The type {0} has multiple constructors marked with the InjectionConstructor attribute. Unable to disambiguate.. + + + + + Looks up a localized string similar to The supplied type {0} must be an open generic type.. + + + + + Looks up a localized string similar to The supplied type {0} does not have the same number of generic arguments as the target type {1}.. + + + + + Looks up a localized string similar to The type {0} does not have an accessible constructor.. + + + + + Looks up a localized string similar to The type {0} does not have a generic argument named "{1}". + + + + + Looks up a localized string similar to while resolving. + + + + + Looks up a localized string similar to The type {0} does not have a constructor that takes the parameters ({1}).. + + + + + Looks up a localized string similar to The type {0} does not have a public method named {1} that takes the parameters ({2}).. + + + + + Looks up a localized string similar to The type {0} does not contain an instance property named {1}.. + + + + + Looks up a localized string similar to The type {0} is not a generic type, and you are attempting to inject a generic parameter named "{1}".. + + + + + Looks up a localized string similar to The type {0} is not an array type with rank 1, and you are attempting to use a [DependencyArray] attribute on a parameter or property with this type.. + + + + + Looks up a localized string similar to Optional dependencies must be reference types. The type {0} is a value type.. + + + + + Looks up a localized string similar to The property {0} on type {1} is not settable.. + + + + + Looks up a localized string similar to The property {0} on type {1} is of type {2}, and cannot be injected with a value of type {3}.. + + + + + Looks up a localized string similar to The value for the property "{0}" could not be resolved.. + + + + + Looks up a localized string similar to The provided string argument must not be empty.. + + + + + Looks up a localized string similar to Resolution of the dependency failed, type = "{0}", name = "{1}". + Exception occurred while: {2}. + Exception is: {3} - {4} + ----------------------------------------------- + At the time of the exception, the container was: + . + + + + + Looks up a localized string similar to Resolving {0},{1}. + + + + + Looks up a localized string similar to Resolving {0},{1} (mapped from {2}, {3}). + + + + + Looks up a localized string similar to Resolving value for property {0}.{1}. + + + + + Looks up a localized string similar to The constructor {1} selected for type {0} has ref or out parameters. Such parameters are not supported for constructor injection.. + + + + + Looks up a localized string similar to Setting value for property {0}.{1}. + + + + + Looks up a localized string similar to The type {0} cannot be constructed. You must configure the container to supply this value.. + + + + + Looks up a localized string similar to The type {1} cannot be assigned to variables of type {0}.. + + + + + Looks up a localized string similar to <unknown>. + + + + + A simple, extensible dependency injection container. + + + + + Create a default . + + + + + Create a with the given parent container. + + The parent . The current object + will apply its own settings first, and then check the parent for additional ones. + + + + RegisterType a type mapping with the container, where the created instances will use + the given . + + that will be requested. + that will actually be returned. + Name to use for registration, null if a default registration. + The that controls the lifetime + of the returned instance. + Injection configuration objects. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + RegisterType an instance with the container. + + + + Instance registration is much like setting a type as a singleton, except that instead + of the container creating the instance the first time it is requested, the user + creates the instance ahead of type and adds that instance to the container. + + + Type of instance to register (may be an implemented interface instead of the full type). + Object to returned. + Name for registration. + + If true, the container will take over the lifetime of the instance, + calling Dispose on it (if it's ) when the container is Disposed. + + If false, container will not maintain a strong reference to . User is reponsible + for disposing instance, and for keeping the instance from being garbage collected. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Get an instance of the requested type with the given name from the container. + + of object to get from the container. + Name of the object to retrieve. + Any overrides for the resolve call. + The retrieved object. + + + + Return instances of all registered types requested. + + + + This method is useful if you've registered multiple types with the same + but different names. + + + Be aware that this method does NOT return an instance for the default (unnamed) registration. + + + The type requested. + Any overrides for the resolve calls. + Set of objects of type . + + + + Run an existing object through the container and perform injection on it. + + + + This method is useful when you don't control the construction of an + instance (ASP.NET pages or objects created via XAML, for instance) + but you still want properties and other injection performed. + + of object to perform injection on. + Instance to build up. + name to use when looking up the typemappings and other configurations. + Any overrides for the buildup. + The resulting object. By default, this will be , but + container extensions may add things like automatic proxy creation which would + cause this to return a different object (but still type compatible with ). + + + + Run an existing object through the container, and clean it up. + + The object to tear down. + + + + Add an extension object to the container. + + to add. + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Get access to a configuration interface exposed by an extension. + + Extensions can expose configuration interfaces as well as adding + strategies and policies to the container. This method walks the list of + added extensions and returns the first one that implements the requested type. + + of configuration interface required. + The requested extension's configuration interface, or null if not found. + + + + Remove all installed extensions from this container. + + + + This method removes all extensions from the container, including the default ones + that implement the out-of-the-box behavior. After this method, if you want to use + the container again you will need to either readd the default extensions or replace + them with your own. + + + The registered instances and singletons that have already been set up in this container + do not get removed. + + + The object that this method was called on (this in C#, Me in Visual Basic). + + + + Create a child container. + + + A child container shares the parent's configuration, but can be configured with different + settings or lifetime. + The new child container. + + + + Dispose this container instance. + + + Disposing the container also disposes any child containers, + and disposes any instances whose lifetimes are managed + by the container. + + + + + Dispose this container instance. + + + This class doesn't have a finalizer, so will always be true. + True if being called from the IDisposable.Dispose + method, false if being called from a finalizer. + + + + Remove policies associated with building this type. This removes the + compiled build plan so that it can be rebuilt with the new settings + the next time this type is resolved. + + Type of object to clear the plan for. + Name the object is being registered with. + + + + The parent of this container. + + The parent container, or null if this container doesn't have one. + + + + Get a sequence of that describe the current state + of the container. + + + + + Implementation of the ExtensionContext that is actually used + by the UnityContainer implementation. + + + This is a nested class so that it can access state in the + container that would otherwise be inaccessible. + + + + + This event is raised when the method, + or one of its overloads, is called. + + + + + This extension supplies the default behavior of the UnityContainer API + by handling the context events and setting policies. + + + + + Install the default container behavior into the container. + + + + + Remove the default behavior from the container. + + + + + Helper class to wrap common reflection stuff dealing with + methods. + + + + + Create a new instance that + lets us do more reflection stuff on that method. + + The method to reflect on. + + + + Given our set of generic type arguments, + + The generic type arguments. + An array with closed parameter types. + + + + Returns true if any of the parameters of this method + are open generics. + + + + + Return the of each parameter for this + method. + + Sequence of objects, one for + each parameter in order. + + + + A helper class that encapsulates two different + data items together into a a single item. + + + + + Create a new containing + the two values give. + + First value + Second value + + + + The first value of the pair. + + + + + The second value of the pair. + + + + + Container for a Pair helper method. + + + + + A helper factory method that lets users take advantage of type inference. + + Type of first value. + Type of second value. + First value. + Second value. + A new instance. + + + + A utility class that handles the logic of matching parameter + lists, so we can find the right constructor and method overloads. + + + + + Create a new that will attempt to + match the given parameter types. + + Target parameters to match against. + + + + Tests to see if the given set of types matches the ones + we're looking for. + + parameter list to look for. + true if they match, false if they don't. + + + + Tests to see if the given set of types matches the ones we're looking for. + + Candidate method signature to look for. + True if they match, false if they don't. + + + + Another reflection helper class that has extra methods + for dealing with ParameterInfos. + + + + + A small helper class to encapsulate details of the + reflection API, particularly around generics. + + + + + Create a new instance that + lets you look at information about the given type. + + Type to do reflection on. + + + + Test the given object, looking at + the parameters. Determine if any of the parameters are + open generic types that need type attributes filled in. + + The method to check. + True if any of the parameters are open generics. False if not. + + + + If this type is an open generic, use the + given array to + determine what the required closed type is and return that. + + If the parameter is not an open type, just + return this parameter's type. + Type arguments to substitute in for + the open type parameters. + Corresponding closed type of this parameter. + + + + Given a generic argument name, return the corresponding type for this + closed type. For example, if the current type is SomeType<User>, and the + corresponding definition was SomeType<TSomething>, calling this method + and passing "TSomething" will return typeof(User). + + Name of the generic parameter. + Type of the corresponding generic parameter, or null if there + is no matching name. + + + + The object we're reflecting over. + + + + + Is this type generic? + + + + + Is this type an open generic (no type parameter specified) + + + + + Is this type an array type? + + + + + Is this type an array of generic elements? + + + + + The type of the elements in this type (if it's an array). + + + + + Create a new instance of that + lets you query information about the given ParameterInfo object. + + Parameter to query. + + + + A set of helper methods to pick through lambdas and pull out + from them. + + + + + Pull out a object from an expression of the form + () => SomeClass.SomeMethod() + + Expression describing the method to call. + Corresponding . + + + + Pull out a object from an expression of the form + x => x.SomeMethod() + + The type where the method is defined. + Expression describing the method to call. + Corresponding . + + + + Pull out a object for the get method from an expression of the form + x => x.SomeProperty + + The type where the method is defined. + The type for the property. + Expression describing the property for which the get method is to be extracted. + Corresponding . + + + + Pull out a object for the set method from an expression of the form + x => x.SomeProperty + + The type where the method is defined. + The type for the property. + Expression describing the property for which the set method is to be extracted. + Corresponding . + + + + Pull out a object from an expression of the form () => new SomeType() + + The type where the constructor is defined. + Expression invoking the desired constructor. + Corresponding . + + + diff --git a/Lib/Portoa.Log4Net.dll b/Lib/Portoa.Log4Net.dll index 17bd593c5c2f465675606d824e66e91f713940f6..3454be50ea2ee9d4fd5dca8ce9da5991cdf31d5f 100644 GIT binary patch delta 51 zcmZqBXwaC@!F*UHcw_fmP64;adk;RjbklFkb+5mP`#HlmTX6X>f@CMRb89lPZr;f4 G&jA2bniU5C delta 51 zcmZqBXwaC@!Q6k`d}H@qPJwj(6V_I*5}o(m<}$s@*)V^z1(y#aNOp2Nw + + + Portoa.Log4Net + + + + diff --git a/Lib/Portoa.NHibernate.dll b/Lib/Portoa.NHibernate.dll index 1e15def6915335a4896d72a7bc5787114fc58343..3554c9da69f32ccc495cad31b3c58cf646c558a1 100644 GIT binary patch literal 16896 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 SJMXSVf7oXK)Y>0M1pXf3 delta 5698 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 Cbb6ow diff --git a/Lib/Portoa.NHibernate.xml b/Lib/Portoa.NHibernate.xml new file mode 100644 index 0000000..09b23de --- /dev/null +++ b/Lib/Portoa.NHibernate.xml @@ -0,0 +1,45 @@ + + + + Portoa.NHibernate + + + + + Handles transactions in NHibernate, does not support nested transactions + + + + + Starts a transaction + + + + + Commits a transaction + + If a transaction has not been started + + + + Rolls back a transaction + + If a transaction has not been started + + + + Invoked before an entity is instantiated. Arguments are the entity name, its ID + and a service provider + + + + + Invoked after an entity is instantiated. Arguments are the entity + and a service provider + + + + Stolen mostly from Mike Valenty + + + diff --git a/Lib/Portoa.Web.dll b/Lib/Portoa.Web.dll index 781edfd458dd347beda173ebec9f958a303e80e0..876a6681c77067fa8934c5fcd8b8931050302c7a 100644 GIT binary patch literal 38912 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 + + + Portoa.Web + + + + + Signifies that this controller can handle errors that aren't handled by + application code + + + + + Executed when an unknown error occurs + + + + + Executed when a page is not found + + + + + Executed when the user is forbidden from seeing the requested page + + + + + Model binder that uses a service provider to resolve the model binder designated by + which will do the action model binding + + The model binder to resolve + + + + Creates a submit button with the specified button text, input name and HTML attributes + + The text to display on the submit button + The name of the input + Anonymous object with HTML attribute values + + + + Creates a label with the specified text for the specified reference tag + + The text/HTML to display inside the label + The reference ID of the labeled node (e.g. the value of the "for" attribute) + The HTML attributes + + + + Creates a button with the specified display text and the specified custom HTML attributes + + The text that the button will display + Any additional HTML attributes for the input tag + + + + Creates a button with the specified display text and the specified custom HTML attributes + + The text that the button will display + Any additional HTML attributes for the input tag + + + + Service for authenticating users + + + + + Logs in the specified user with the specified username + + + + + Logs out the currently logged in user + + + + + Determines if a user identified by the given username and password + is a valid user in the system + + + + + Adapted from http://eliasbland.wordpress.com/2009/08/08/enumeration-model-binder-for-asp-net-mvc/ + + + + + Sets the HTTP status code on the response object before + calling base.ExecuteResult() + + + + + Handles global application-wide errors that don't get caught by + normal means + + + + + Handles global application errors by invoking the specified error controller + + + + + Configures interception to occur for any subsequent container registrations + that are not part of NHibernate + + + + This class exists to get rid of the SessionState and TempData error. Just google it. + + + Don't use this method, it's only here to prevent you from using it. + + + + Maps the type to the binder type . + + + + + Maps the type to the binder type + using the given service provider to resolve the binder + + + + + Logs all interceptable method calls via the + + + + + Provides an interface for interacting with session data + + + + + Gets or sets an item from the backing store + + The key of the item to retrieve + + + + Extension methods for UnityContainer + + + + + Adds an extension if it hasn't already been registered with the container + + + + + Determines whether any of the given types are registered in the container + + + + + Determines if all of the given types are registered in the container + + + + + + + + Session store that uses the current HttpContext + + + + + Controller for handling and displaying errors that aren't handled by application code + + + + + Enables you to dynamically add filters to a ControllerActionInvoker. This class will also + perform injection on all filters that are annotated with NeedsBuildUpAttribute. + + Adapted from http://blog.ploeh.dk/2009/12/01/GlobalErrorHandlingInASPNETMVC.aspx + + + + Overridden to add the new filters to the default filters + + + + + Truncates a string to 150 characters in a pretty way, if necessary + + + + + Gets all model state errors as a line feed-delimited string + + + + + Sets up the temporary data provider so that it won't barf with Session errors + + + + + Gets a value from the request and casts it to the specified type + + + + + Gets a value from the request + + + + + Adds an error to the model state + + + + + Uses a container to create controllers + + + + + Base for an Unity/NHibernate MVC application + + + + + Handles uncaught application exceptions; default implementation uses + and to + display errors + + The uncaught exception + + + + Creates the configuration used for NHibernate; default implementation uses the default + NHibernate configuration, and sets a custom interceptor. The configuration can be retrieved + outside of this method (if needed) via the container. Do not call this method directly. + + + + + + Registers any routes for the application; default implementation registers nothing + + + + + Registers any applicable areas; default implementations calls + AreaRegistration.RegisterAllAreas() + + + + + Configures the controller factory; default implementation uses Unity to + resolve each controller with a custom action invoker + + + + + + Performs any application-specific configuration for Unity; default implementation + does nothing + + + + + IControllerFactory that provides a mechanism to perform injection + on the controller after it is instantiated + + + + + Event that fires after a controller is instantiated + + + + + Gets the MethodInfo associated with the actual object instance + in a CallHandler's method invocation + + + + + LINQifies an annoying IParameterCollection + + + + + Reads the app config and applies the Unity configuration, if applicable + + + + + Controller factory that uses a service provider to resolve controllers + + + + + Sets the name of the logger to retrieve + + + + + Configures the application to use log4net + + + + diff --git a/Lib/Portoa.dll b/Lib/Portoa.dll index 90eb91c36b4001e8540364d44e1fa0204e0f25a3..6ee353f3b9f0c23a110699d90e066b614531a485 100644 GIT binary patch delta 53 zcmZpe!_+W`X+j6{VU^&G-HBxaOT#$~j9*Z=?k delta 53 zcmZpe!_+W`X+j5cl$-3v?!+>IyeaW{i~cgXZ!gT+`&@d`t<8VR8u&o6lj~bG85uXP IYz^lC09~0DApigX diff --git a/Lib/Portoa.xml b/Lib/Portoa.xml new file mode 100644 index 0000000..be72679 --- /dev/null +++ b/Lib/Portoa.xml @@ -0,0 +1,363 @@ + + + + Portoa + + + + + Implodes an enumeration given a selector function and a separator + + + + + Performs the specified action on each item in the collection. The action will execute immediately. + Use WalkDeferred if deferred execution is needed. + + + + + + Performs the specified action on each item in the collection. The action will not execute until the collection + is enumerated. Use Walk if deferred execution is not needed. + + + + + + Indicates that marked element should be localized or not. + + + + + Initializes a new instance of the class. + + true if a element should be localized; otherwise, false. + + + + Returns whether the value of the given object is equal to the current . + + The object to test the value equality of. + + true if the value of the given object is equal to that of the current; otherwise, false. + + + + + Returns the hash code for this instance. + + A hash code for the current . + + + + Gets a value indicating whether a element should be localized. + true if a element should be localized; otherwise, false. + + + + + Indicates that marked method builds string by format pattern and (optional) arguments. + Parameter, which contains format string, should be given in constructor. + The format string should be in -like form + + + + + Initializes new instance of StringFormatMethodAttribute + + Specifies which parameter of an annotated method should be treated as format-string + + + + Gets format parameter name + + + + + Indicates that the function argument should be string literal and match one of the parameters of the caller function. + For example, has such parameter. + + + + + Indicates that the marked method is assertion method, i.e. it halts control flow if one of the conditions is satisfied. + To set the condition, mark one of the parameters with attribute + + + + + + Indicates the condition parameter of the assertion method. + The method itself should be marked by attribute. + The mandatory argument of the attribute is the assertion type. + + + + + + Initializes new instance of AssertionConditionAttribute + + Specifies condition type + + + + Gets condition type + + + + + Specifies assertion type. If the assertion method argument satisifes the condition, then the execution continues. + Otherwise, execution is assumed to be halted + + + + + Indicates that the marked parameter should be evaluated to true + + + + + Indicates that the marked parameter should be evaluated to false + + + + + Indicates that the marked parameter should be evaluated to null value + + + + + Indicates that the marked parameter should be evaluated to not null value + + + + + Indicates that the marked method unconditionally terminates control flow execution. + For example, it could unconditionally throw exception + + + + + Indicates that the value of marked element could be null sometimes, so the check for null is necessary before its usage + + + + + Indicates that the value of marked element could never be null + + + + + Indicates that the value of marked type (or its derivatives) cannot be compared using '==' or '!=' operators. + There is only exception to compare with null, it is permitted + + + + + When applied to target attribute, specifies a requirement for any type which is marked with + target attribute to implement or inherit specific type or types + + + + [BaseTypeRequired(typeof(IComponent)] // Specify requirement + public class ComponentAttribute : Attribute + {} + + [Component] // ComponentAttribute requires implementing IComponent interface + public class MyComponent : IComponent + {} + + + + + + Initializes new instance of BaseTypeRequiredAttribute + + Specifies which types are required + + + + Gets enumerations of specified base types + + + + + Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library), + so this symbol will not be marked as unused (as well as by other usage inspections) + + + + + Gets value indicating what is meant to be used + + + + + Should be used on attributes and causes ReSharper to not mark symbols marked with such attributes as unused (as well as by other usage inspections) + + + + + Gets value indicating what is meant to be used + + + + + Only entity marked with attribute considered used + + + + + Indicates implicit assignment to a member + + + + + Indicates implicit instantiation of a type + + + + + Specify what is considered used implicitly when marked with or + + + + + Members of entity marked with attribute are considered used + + + + + Entity marked with attribute and all its members considered used + + + + + Validates that the value is greater than zero + + + + + Gets a human-readable string representing the given type + + Whether to use the fully qualified name of each type + + + + Represents a transaction + + + + + Starts a transaction + + + + + Commits a transaction + + + + + Rolls back a transaction + + + + + Drops the temp database and resets the generated database name + + + + + Creates a temporary database with a unique name + + + + + Executes a SQL script on the test database + + + + + Gets the connection string for the fake database + + + + + Sets the default connection string (do not include the initial catalog) + + + + + Provides a CRUD interface to a persistence medium for entities that have an + integral identifier + + The entity's type + + + + Provides a CRUD interface to a persistence medium + + The entity's type + The entity identifier's type + + + + Persists an entity (inserts or updates) + + The entity to save + + + + Reloads an entity from the persistence medium + + The entity to reload + + + + Deletes an entity + + The unique identifier of the entity to delete + + + + Finds an entity by its unique identifier + + The unique identifier of the entity to locate + + + + + Equivalent of "select *" + + + + + TODO: add reflection cache + + + + + Extension to System.ComponentModel.DataAnnotations.Validator.TryValidateObject(). This method validates + the object, its properties and its fields. + + + + + Validates that a string is a valid email address. Set AllowEmpty to true + if null and empty strings should not be validated. + + + + + Determines if this object should be logged + + + + + Signifies that this object should not be logged + + + + diff --git a/Src/VideoGameQuotes.Api/ICurrentUserProvider.cs b/Src/VideoGameQuotes.Api/ICurrentUserProvider.cs new file mode 100644 index 0000000..545591a --- /dev/null +++ b/Src/VideoGameQuotes.Api/ICurrentUserProvider.cs @@ -0,0 +1,8 @@ +using JetBrains.Annotations; + +namespace VideoGameQuotes.Api { + public interface ICurrentUserProvider { + [CanBeNull] + User CurrentUser { get; } + } +} \ No newline at end of file diff --git a/Src/VideoGameQuotes.Api/Persistence/IUserRepository.cs b/Src/VideoGameQuotes.Api/Persistence/IUserRepository.cs new file mode 100644 index 0000000..4c097e3 --- /dev/null +++ b/Src/VideoGameQuotes.Api/Persistence/IUserRepository.cs @@ -0,0 +1,18 @@ +using System.Linq; +using NHibernate; +using Portoa.NHibernate; +using Portoa.Persistence; + +namespace VideoGameQuotes.Api.Persistence { + public interface IUserRepository : IRepository { + User FindByUsername(string name); + } + + public class UserRepository : NHibernateRepository, IUserRepository { + public UserRepository(ISession session) : base(session) { } + + public User FindByUsername(string name) { + return Records.FirstOrDefault(user => user.Username == name); + } + } +} \ No newline at end of file diff --git a/Src/VideoGameQuotes.Api/Persistence/UserService.cs b/Src/VideoGameQuotes.Api/Persistence/UserService.cs new file mode 100644 index 0000000..e1b08aa --- /dev/null +++ b/Src/VideoGameQuotes.Api/Persistence/UserService.cs @@ -0,0 +1,27 @@ +using Portoa.Persistence; + +namespace VideoGameQuotes.Api.Persistence { + + public interface IUserService { + User Save(User user); + User FindByUsername(string name); + } + + public class UserService : IUserService { + private readonly IUserRepository repository; + + public UserService(IUserRepository repository) { + this.repository = repository; + } + + [UnitOfWork] + public User Save(User user) { + return repository.Save(user); + } + + [UnitOfWork] + public User FindByUsername(string name) { + return repository.FindByUsername(name); + } + } +} \ No newline at end of file diff --git a/Src/VideoGameQuotes.Api/VideoGameQuotes.Api.csproj b/Src/VideoGameQuotes.Api/VideoGameQuotes.Api.csproj index 4c88314..7436945 100644 --- a/Src/VideoGameQuotes.Api/VideoGameQuotes.Api.csproj +++ b/Src/VideoGameQuotes.Api/VideoGameQuotes.Api.csproj @@ -65,6 +65,9 @@ + + + diff --git a/Src/VideoGameQuotes.Web/Controllers/HomeController.cs b/Src/VideoGameQuotes.Web/Controllers/HomeController.cs index 400efa4..5eaa33e 100644 --- a/Src/VideoGameQuotes.Web/Controllers/HomeController.cs +++ b/Src/VideoGameQuotes.Web/Controllers/HomeController.cs @@ -1,11 +1,8 @@ using System.Web.Mvc; namespace VideoGameQuotes.Web.Controllers { - [HandleError] public class HomeController : Controller { public ActionResult Index() { - ViewData["Message"] = "Welcome to ASP.NET MVC!"; - return View(); } } diff --git a/Src/VideoGameQuotes.Web/Default.aspx b/Src/VideoGameQuotes.Web/Default.aspx new file mode 100644 index 0000000..5a305ed --- /dev/null +++ b/Src/VideoGameQuotes.Web/Default.aspx @@ -0,0 +1,3 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="VideoGameQuotes.Web._Default" %> + +<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%> diff --git a/Src/VideoGameQuotes.Web/Default.aspx.cs b/Src/VideoGameQuotes.Web/Default.aspx.cs new file mode 100644 index 0000000..6ad71c0 --- /dev/null +++ b/Src/VideoGameQuotes.Web/Default.aspx.cs @@ -0,0 +1,21 @@ +using System.Diagnostics; +using System.Web; +using System.Web.Mvc; +using System.Web.UI; + +namespace VideoGameQuotes.Web { + public partial class _Default : Page { + [DebuggerNonUserCode] + public void Page_Load(object sender, System.EventArgs e) { + // Change the current path so that the Routing handler can correctly interpret + // the request, then restore the original path so that the OutputCache module + // can correctly process the response (if caching is enabled). + + string originalPath = Request.Path; + HttpContext.Current.RewritePath(Request.ApplicationPath, false); + IHttpHandler httpHandler = new MvcHttpHandler(); + httpHandler.ProcessRequest(HttpContext.Current); + HttpContext.Current.RewritePath(originalPath, false); + } + } +} \ No newline at end of file diff --git a/Src/VideoGameQuotes.Web/Global.asax.cs b/Src/VideoGameQuotes.Web/Global.asax.cs index 1486c75..a727884 100644 --- a/Src/VideoGameQuotes.Web/Global.asax.cs +++ b/Src/VideoGameQuotes.Web/Global.asax.cs @@ -1,30 +1,36 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; +using System.Web.Mvc; using System.Web.Routing; +using Microsoft.Practices.Unity; +using Portoa.Web; +using Portoa.Web.Unity; +using VideoGameQuotes.Api; +using VideoGameQuotes.Api.Persistence; +using VideoGameQuotes.Web.Security; namespace VideoGameQuotes.Web { - // Note: For instructions on enabling IIS6 or IIS7 classic mode, - // visit http://go.microsoft.com/?LinkId=9394801 - - public class MvcApplication : System.Web.HttpApplication { - public static void RegisterRoutes(RouteCollection routes) { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - "Default", // Route name - "{controller}/{action}/{id}", // URL with parameters - new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults - ); - + public class MvcApplication : ApplicationBase { + protected override void ConfigureUnity() { + Container + .AddNewExtension() + .Configure() + .SetName("VideoGameQuotes.Web"); + + Container + .AddNewExtension() + .RegisterType() + .RegisterType() + .RegisterType(); } - protected void Application_Start() { - AreaRegistration.RegisterAllAreas(); + protected override void RegisterRoutes(RouteCollection routes) { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + routes.IgnoreRoute("media/{*anything}"); - RegisterRoutes(RouteTable.Routes); + routes.MapRoute( + "Default", + "{controller}/{action}/{id}", + new { controller = "Home", action = "Index", id = UrlParameter.Optional } + ); } } } \ No newline at end of file diff --git a/Src/VideoGameQuotes.Web/Security/UserProvider.cs b/Src/VideoGameQuotes.Web/Security/UserProvider.cs new file mode 100644 index 0000000..7ee0d00 --- /dev/null +++ b/Src/VideoGameQuotes.Web/Security/UserProvider.cs @@ -0,0 +1,46 @@ +using System.Web; +using Portoa.Web.Session; +using VideoGameQuotes.Api; +using VideoGameQuotes.Api.Persistence; + +namespace VideoGameQuotes.Web.Security { + public class UserProvider : ICurrentUserProvider { + private readonly IUserService userService; + private readonly ISessionStore sessionStore; + private readonly HttpContextBase httpContext; + + public UserProvider(IUserService userService, ISessionStore sessionStore, HttpContextBase httpContext) { + this.userService = userService; + this.sessionStore = sessionStore; + this.httpContext = httpContext; + } + + public User CurrentUser { + get { + var user = sessionStore["user"] as User; + + if (user == null) { + //identify user by IP address + var username = httpContext.Request.UserHostAddress; + if (string.IsNullOrEmpty(username)) { + return null; + } + + user = userService.FindByUsername(username); + if (user == null) { + user = new User { + Username = username, + Group = UserGroup.User + }; + + user = userService.Save(user); + } + + sessionStore["user"] = user; + } + + return user; + } + } + } +} \ No newline at end of file diff --git a/Src/VideoGameQuotes.Web/VideoGameQuotes.Web.csproj b/Src/VideoGameQuotes.Web/VideoGameQuotes.Web.csproj index bf0a1bb..451a467 100644 --- a/Src/VideoGameQuotes.Web/VideoGameQuotes.Web.csproj +++ b/Src/VideoGameQuotes.Web/VideoGameQuotes.Web.csproj @@ -34,6 +34,22 @@ + + ..\..\Lib\Microsoft.Practices.Unity.dll + + + ..\..\Lib\Portoa.dll + + + ..\..\Lib\Portoa.Log4Net.dll + + + False + ..\..\Lib\Portoa.NHibernate.dll + + + ..\..\Lib\Portoa.Web.dll + @@ -66,13 +82,20 @@ + + Default.aspx + ASPXCodeBehind + + Global.asax + + Web.config @@ -88,6 +111,12 @@ + + + {329FAB1F-A18D-4B7B-9E3C-A0C157E55503} + VideoGameQuotes.Api + + - - - - + + +
+ + + + + + + + - - - - - - - - + + + + + + - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + + + - - - - - - - - - + + + + - - - - - - - - - - - - - + + + + + + + + diff --git a/Src/VideoGameQuotes.Web/hibernate.cfg.xml b/Src/VideoGameQuotes.Web/hibernate.cfg.xml new file mode 100644 index 0000000..a5d62f9 --- /dev/null +++ b/Src/VideoGameQuotes.Web/hibernate.cfg.xml @@ -0,0 +1,13 @@ + + + + + NHibernate.Driver.MySqlDataDriver + Database=vgquotes;Data Source=localhost;User Id=vgquotes;Password=vgquotes + NHibernate.Dialect.MySQLDialect + NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu + true + + + + \ No newline at end of file diff --git a/Tests/VideoGameQuotes.Api.Tests/NHibernate/schema.sql b/Tests/VideoGameQuotes.Api.Tests/NHibernate/schema.sql index 5fe656e..5837fad 100644 --- a/Tests/VideoGameQuotes.Api.Tests/NHibernate/schema.sql +++ b/Tests/VideoGameQuotes.Api.Tests/NHibernate/schema.sql @@ -58,7 +58,7 @@ alter table game_quote drop foreign key fk_quote_game create table vote ( vote_id INTEGER NOT NULL AUTO_INCREMENT, created DATETIME not null, - direction INTEGER not null, + point_value INTEGER not null, voter_id INTEGER not null, quote_id INTEGER not null, primary key (vote_id) diff --git a/Tests/VideoGameQuotes.Api.Tests/VideoGameQuotes.Api.Tests.csproj.user b/Tests/VideoGameQuotes.Api.Tests/VideoGameQuotes.Api.Tests.csproj.user new file mode 100644 index 0000000..76fe5a5 --- /dev/null +++ b/Tests/VideoGameQuotes.Api.Tests/VideoGameQuotes.Api.Tests.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file