我正在为基于Web的CMS平台开发一些可重用的组件,并希望使用Unity而不是Spring.NET进行调查。
在解决方案#1中,我在分层架构中开发了各种组件。使用Spring.NET,我可以在其中一个程序集中嵌入一个XML配置文件,该程序集声明了哪些对象被加载到DI容器中。关键是组件的构建器应该决定哪个实现是组件上下文中的首选实现。
在我的其他解决方案中,我只是添加一个引用来从程序集加载配置,并将这些元素加载到该网站的运行容器中。
Unity下的这种情况的配置策略是什么?
答案 0 :(得分:1)
Unity支持XML configuration(AKA设计时配置)和programmatic configuration(AKA运行时配置)。 XML配置必须遵循The Unity Configuration Schema。
开箱即用的XML配置挂钩到.NET配置,所以如果不想使用app.config / web.config并手动加载我认为你必须创建自己的ConfigurationSection类来加载配置信息:
public class MyUnityConfigurationSection : UnityConfigurationSection
{
public string Serialize()
{
return SerializeSection(null, UnityConfigurationSection.SectionName,
ConfigurationSaveMode.Full);
}
public void LoadConfigurationFile(string fileName)
{
Deserialize(File.ReadAllText(fileName));
}
public void Deserialize(string xml)
{
using (var sr = new StringReader(xml))
using (var reader = XmlTextReader.Create(sr))
{
base.DeserializeSection(reader);
}
}
}
然后您可以从字符串或文件加载配置:
string configString = "<unity xmlns=\"http://schemas.microsoft.com/practices/2010/unity\">\r\n <container>\r\n <register type=\"IEmployee\" mapTo=\"FakeEmployee\" />\r\n </container>\r\n</unity>";
var config = new MyUnityConfigurationSection();
config.Deserialize(configString);
IUnityContainer container = new UnityContainer();
container.LoadConfiguration(config);
您可能希望在配置程序集中创建一个方法:
public void Configure(IUnityContainer container)
{
// internally configure the container via XML or programmatically
}