[ http://issues.apache.org/jira/browse/IBATISNET-122?page=all ]
Ron Grabowski resolved IBATISNET-122:
-------------------------------------
Resolution: Fixed
Fixed in 321223.
> Allow Resources.cs to process non-fullly-qualified-types
> --------------------------------------------------------
>
> Key: IBATISNET-122
> URL: http://issues.apache.org/jira/browse/IBATISNET-122
> Project: iBatis for .NET
> Type: Bug
> Reporter: Ron Grabowski
> Assignee: Ron Grabowski
> Priority: Minor
>
> IBatisNet should be able to handle loading a type if that type's assembly has
> already been loaded into the current domain. For example in log4net its
> possible to use this syntax:
> <appender name="FileAppender" type="log4net.Appender.FileAppender">
> ...
> </appender>
> You don't need to specify the log4net assembly becuase the log4net assembly
> has already been loaded in the current domain. In other words, you can't tell
> log4net to process the log4net.config file unless the log4net assembly has
> been successfully loaded:
> <!-- log4net isn't required becuase the current domain has already loaded
> the log4net assembly -->
> <appender name="FileAppender" type="log4net.Appender.FileAppender, log4net">
> ...
> </appender>
> The same thing can be applied to IBatisNet's handling of embedded resources.
> The GetEmbeddedResourceAsXmlDocument method of Resources.cs has the following
> code:
> public static XmlDocument GetEmbeddedResourceAsXmlDocument(string resource)
> {
> // snip
> FileAssemblyInfo fileInfo = new FileAssemblyInfo(resource);
> if (fileInfo.IsAssemblyQualified)
> {
> // snip
> }
> else
> {
> // bare type name... loop thru all loaded assemblies
> Assembly [] assemblies = AppDomain.CurrentDomain.GetAssemblies();
> foreach (Assembly assembly in assemblies)
> {
> Stream stream = assembly.GetManifestResourceStream(fileInfo.FileName);
> // snip
> }
> }
> //snip
> }
> The important thing to note here is that IsAssemblyQualified will always be
> true. It can never be false which means the else block is never processed.
> The FileAssemblyInfo constructor calls through to SplitFileAndAssemblyNames:
> // WRONG
> private void SplitFileAndAssemblyNames (string originalFileName)
> {
> _originalFileName = originalFileName;
> int separatorIndex =
> originalFileName.IndexOf(FileAssemblyInfo.FileAssemblySeparator);
> if (separatorIndex < 0)
> {
> throw new ConfigurationException(
> string.Format("Unable to find assembly part to load embedded resource in
> string \"{0}\".",
> originalFileName));
> }
> else
> {
> _unresolvedFileName = originalFileName.Substring(0, separatorIndex).Trim();
> _unresolvedAssemblyName = originalFileName.Substring(separatorIndex +
> 1).Trim();
> }
> }
>
> // CORRECT
> private void SplitFileAndAssemblyNames (string originalFileName)
> {
> _originalFileName = originalFileName;
> int separatorIndex =
> originalFileName.IndexOf(FileAssemblyInfo.FileAssemblySeparator);
> if (separatorIndex < 0)
> {
> _unresolvedFileName = originalFileName.Trim();
> _unresolvedAssemblyName = null; // IsAssemblyQualified will return false
> }
> else
> {
> _unresolvedFileName = originalFileName.Substring(0, separatorIndex).Trim();
> _unresolvedAssemblyName = originalFileName.Substring(separatorIndex +
> 1).Trim();
> }
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira