在多个配置文件中重新定义spring.net对象
我正在使用 spring.net IOC 依赖注入为我的 asp.net Web 应用程序设置 xml 配置文件。我在 web.config 中引用了我的每个配置文件。 spring.net 配置文件(settings.xml)中的设置示例是:
<object id="obj1"
type="NS.Common.Cache.Class, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My Name" />
</object>
这一切都工作正常。
现在我在多个环境中安装我的网络应用程序,因此我正在为环境创建一个 spring.net 配置文件,例如。开发、质量保证、产品。
所以在安装应用时,在web.config中引用了适用的环境spring文件。这是自动安装程序的一部分。
在 qa 环境文件中,我想将“obj1”上面的对象重新定义为:
<object id="obj1"
type="NS.Common.Cache.Class2, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My New Name" />
</object>
但是,由于这是自动化的(添加对环境文件的引用),因此 settings.xml 文件不会更改。
现在使用具有相同 id 的已定义对象引用 2 个文件 - 这会导致重大问题,因为会发生运行时错误。
有什么方法可以包含在 qa.xml 和标志等中来突出显示此对象定义会覆盖具有相同对象 ID 的任何其他 xml 文件中的任何其他定义的对象吗?
I am setting up my xml configuration files for my asp.net web application using spring.net IOC dependency injection. I referenced each of my config files in the web.config. A sample of setting in spring.net configuration file (settings.xml) is:
<object id="obj1"
type="NS.Common.Cache.Class, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My Name" />
</object>
This all works fine.
Now I install my web application in multiple environments so I am creating a spring.net config file for environment eg. dev, qa, prod.
So when installing the application, the applicable environment spring file is referenced in the web.config. This is part of an automated installer.
Within the qa environment file, I want to redefine the object above "obj1" to:
<object id="obj1"
type="NS.Common.Cache.Class2, NS.Common"
singleton="true"
init-method="Initialize"
destroy-method="Dispose">
<property name="Name" value="My New Name" />
</object>
However as this is automated (adding the reference to the environment file), the settings.xml file is not changed.
And now referencing 2 files with a defined object with the same id - this causes major problems as run time errors will occur.
Is there any way that I can include in the qa.xml and flag or the like to highlight this object definition overrides any other defined objects in any other xml file with the same object id?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以加载两个相同的 id,最后一个 id 将“覆盖”第一个列出的对象(在创建之前,通过在上下文定义中引用它们,它们必须位于不同的文件中)。
由于这种默认行为,最好按照从“全局含义”(例如您要重用的第 3 方配置)开始到“本地含义”(将 app.config 作为最后一个条目)的顺序包含上下文资源。
You can load two identical ids and the last id will "override" the first listed object (before creation, they must be in different files by having them referenced within the context definition).
Because of this default behaviour it is a good practice to include your context ressources in the order beginning with "global meaning" (e.g. 3rd party configs you want to reuse) down to "local meaning" (having app.config's as last entry).
您可以在您能够控制的配置文件中定义别名,而不是定义具有相同 ID 的对象(正如 Marijin 已经提到的那样,这是不可能的)。
您可以拥有
然后
在您的 web.config 中使用。
例如,
Instead of defininig objects with the same ID (which is not possible as Marijin already mentioned) you could define an alias in a configuration file you are able to control.
E.g. you could have
and
and then use
in, for instance, your web.config.