[ http://issues.apache.org/jira/browse/IBATISNET-122?page=all ] Gilles Bayon closed IBATISNET-122: ----------------------------------
> 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