0

如何选择性地包含 Spring 配置文件?我想到了与此类似的事情:

  <spring>
    <context>
      <resource uri="file:///Objects/RequiredObjects.xml" />
      <resource uri="file:///Objects/OptionalObjects.xml" required="false" />
    </context>

通过这种方式,我可以为开发人员提供覆盖某些配置部分的可能性(例如,在应用程序启动期间提高本地速度或自动化),而不会影响 app.config 以及开发人员可以签入其修改后的文件的问题,而这并不是他真正的意图为所有人更改配置。

4

1 回答 1

0

不像在 AutoFac 中那么简单(因为已经有一个内置的方式),但可以通过一些编码来实现类似的东西:

using System.IO;
using System.Xml;

using Spring.Core.IO;

    public class OptionalFileSystemResource : FileSystemResource
    {
        public OptionalFileSystemResource(string uri)
            : base(uri)
        {
        }

        public override Stream InputStream
        {
            get
            {
                if (System.IO.File.Exists(this.Uri.LocalPath))
                {
                    return base.InputStream;
                }

                return CreateEmptyStream();
            }
        }

        private static Stream CreateEmptyStream()
        {
            var xml = new XmlDocument();
            xml.LoadXml("<objects />");
            var stream = new MemoryStream();
            xml.Save(stream);
            stream.Position = 0;

            return stream;
        }
    }

注册一个节处理程序:

<sectionGroup name="spring">
     ...
      <section name="resourceHandlers" type="Spring.Context.Support.ResourceHandlersSectionHandler, Spring.Core"/>
     ...
</sectionGroup>

...

<spring>
  <resourceHandlers>
    <handler protocol="optionalfile" type="MyCoolStuff.OptionalFileSystemResource, MyCoolStuff" />
  </resourceHandlers>

  ...

<context>
  <resource uri="file://Config/MyMandatoryFile.xml" />
  <resource uri="optionalfile://Config/MyOptionalFile.xml" />
  ...

您将在Spring.Net 文档中找到有关资源和资源处理程序的更多信息。

于 2014-08-28T16:42:06.513 回答