gpt4 book ai didi

c# - 如何更好地将配置元素映射到应用程序对象?

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:33 24 4
gpt4 key购买 nike

我有一个 .NET 应用程序,它有一个自定义配置,可以在启动时重新构造一些类。这不是简单的(反)序列化,而是更复杂和混合的。

class FooElement : ConfigurationElement
{
static ConfigurationProperty propValue = new ConfigurationProperty("value", typeof(int));
static ConfigurationProperty propType = new ConfigurationProperty("type", typeof(string));

[ConfigurationProperty("value")]
public int Value
{
get { return (int)this[propValue] }
set { this[propValue] = value }
}

[ConfigurationProperty("type")]
public string Type
{
get { return (int)this[propType] }
set { this[propType] = value }
}
}

class Foo : IFoo
{
public int Value { get; set;
public string Type { get; set; }
}

一些配置元素通过属性重复应用程序对象,但我不想在我的应用程序中使用元素,为此我创建了轻量级对象。也许我可以称它们为 POCO。

目前我有下一个:配置:

<elements>
<add type="MyProj.Foo, MyProj" value="10" />
</elements>

代码:

elements.Select(e => (IFoo)Activator.CreateInstance(e.Type, e));

public Foo(FooElement element)
{
this.Value = element.Value;
}

如何更好地做到这一点?也许使用 IoC 或类似的东西。

最佳答案

interface IConfigurationConverter<TElement, TObject>
{
TObject Convert(TElement element);
}

class FooConfigurationConverter : IConfigurationConverter<FooElement, Foo>
{
public Foo Convert(FooElement element)
{
return new Foo { Value = element.Value };
}
}

FooConfigurationConverter converter = IoC.Resolve<IConfigurationConverter<FooElement, Foo>>();
Foo foo = converter.Convert(element);

关于c# - 如何更好地将配置元素映射到应用程序对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5772189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com