我想创建一个字典并在Unity的配置文件中填充它,如here所示。但是,该示例似乎来自较旧版本的Unity IoC,但我想知道如何使用Unity 4执行此操作。
<type ... to="MyTypeServer">
<typeConfig>
<property Name="Converters" KeyType"string" ValueType="IConverter">
<entry>
<key>csv</key>
<value><dependency name="csvConverter"/></value>
</entry>
<entry>
<key>xml</key>
<value><dependency name="xmlConverter"/></value>
</entry>
</property>
</typeConfig>
</type>
<type name="csvConverter" from="IConverter" to="MyCsvConverter">
</type>
<type name="xmlConverter" from="IConverter" to="MyXmlConverter">
</type>
这是班级:
public class MyTypeServer
{
public IDictionary<string, IConverter> Converters
{
set;
private get;
}
public void DoConversion(string fileName)
{
string fileType = Path.GetFileExtension(fileName);
IConverter converter = Converters[fileType];
if (converter != null)
converter.DoConversion(fileName);
..
...
}
}
我一直在努力研究但没有运气。
答案 0 :(得分:0)
您发布的codeplex链接:
这是我们可以使用字典的东西类型的快速伪代码。
对我来说,如果我们实现了这个功能&#34;我们可以做这样的事情。与我在团结方面的经验一致,我从来没有遇到过这样的事情。
可以做什么:注册所有转换器,将它们全部注入数组,然后自己构建字典。
// register in code or in xml...
container.RegisterType<IConverter, XmlConverter>( "xml-Converter" );
container.RegisterType<IConverter, JsonConverter>( "json-Converter" );
internal class ConverterConsumer
{
public ConverterConsumer( IConverter[] converters )
{
_converters = converters.ToDictionary( x => x.FileType, x => x );
}
#region private
private Dictionary<string, IConverter> _converters;
#endregion
}
public interface IConverter
{
string FileType { get; }
void DoConversion( string fileName );
}
答案 1 :(得分:0)
发帖作为答案,因为我没有足够的意见要发表。这就是我解决问题的方法。不完全是字典方法,但可能会有所帮助。
我的要求-将应用程序设置存储在Unity XML文件中,而不是app.config
我有多个在Unity XML中注册的对象,它们具有连接字符串,Azure队列名称,Azure Blob容器名称等属性。我发现自己经常在XML中复制这些值。我可以使我的对象从 app.config 的* appSettings **元素或其他一些配置部分读取值。但是,我选择不使用app.config来保持对象的可测试性。
我的解决方案-使用
我将所有可重复使用的连接字符串注册在一个位置,如下所示,并且没有重复:
<instance name="cnstring1" value="blah connection string 1"></instance>
<instance name="cnstring2" value="blah connection string 2"></instance>
<instance name="azurequeue1" value="name of receiver queue "></instance>
<instance name="azurequeue2" value="name of sender queue "></instance>
<instance name="azurestoragecnstring" value="your azure storage account connection string 0001"></instance>
在需要时使用 dependency 元素引用名称/值对。
示例XML:
<register name="i2" mapTo="someimplementation" type="someinterface">
<property name="Database">
<dependency name="cnstring1" />
</property>
</register>
示例C#代码段:
public string Database { get; set; }
在运行时,注册为 i2 的对象的属性 Database 将设置为空白连接字符串1 的值。 >
注意事项
以纯文本XML存储连接字符串可能不安全,尤其是在连接字符串具有用户名和密码值的情况下。