【问题标题】:Optional Resources in Spring.NetSpring.Net 中的可选资源
【发布时间】:2014-08-28 09:45:01
【问题描述】:
如何选择性地包含 Spring 配置文件?我想到了与此类似的事情:
<spring>
<context>
<resource uri="file:///Objects/RequiredObjects.xml" />
<resource uri="file:///Objects/OptionalObjects.xml" required="false" />
</context>
这样我可以为开发人员提供覆盖某些配置部分的可能性(例如,在应用程序启动期间提高本地速度或自动化),而不会影响 app.config 以及开发人员可以在未修改文件时签入其修改文件的问题真的是他打算为所有人更改配置。
【问题讨论】:
标签:
ioc-container
spring.net
xml-configuration
【解决方案1】:
不像在 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 中找到有关资源和资源处理程序的更多信息。