Spring.Net中的可选资源

时间:2014-08-28 09:45:01

标签: ioc-container spring.net xml-configuration

如何包含Spring配置文件?我想到了类似的东西:

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

通过这种方式,我可以为开发人员提供覆盖某些配置部分的可能性(例如,用于本地速度提升或应用启动期间的自动化),而不会影响app.config以及开发人员可以检查其修改后的文件的问题真的是他打算为所有人改变配置。

1 个答案:

答案 0 :(得分: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 documentation中找到有关资源和资源处理程序的更多信息。