我想創建一個存儲某些數據的單件工廠。部分數據來自XML文件,其中一部分是硬編碼的。 我被建議定義一個接口IMyConfigData
,它包含數據並讓我的類實現它。保存XML和硬編碼配置數據的接口
這是一個很好的設計嗎?定義和實現接口的優點是什麼,而不是將數據直接包含在類中?
我想在訪問類屬性時使下面的單例線程安全嗎?我如何實現這一目標?
IMyConfigData
有兩個字段,即EntityIdSite
和EntityIdApplication
。我已將這兩者合併到名爲EntityId
的課程中,其中包含Site
和Application
。以這種方式組合元素是否會影響從XML序列化?
接口:
public class EntityId
{
ushort Site { get; set; }
ushort Application { get; set; }
}
public interface IMyConfigData
{
//ushort EntityIdSite { get; set; }
//ushort EntityIdApplication { get; set; }
EntityId entityId {get; set;}
ushort ETypeCountry { get; set; }
byte ETypeCategory { get; set; }
byte ETypeSubCategory { get; set; }
UInt32 PortNumber { get; set; }
}
XML:
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<Configuration xmlns="http://test.com/MyConfiguration">
<Settings>
<setting owner="MySServer" name="AllowEditOnAreas" value="0"/>
<Setting owner="MySServer" name="ApplicationId" value="10"/>
<Setting owner="MyServer" name="Port" value="3000"/>
</Settings>
</Configuration>
實現:
public sealed class Singleton : IMyConfigData
{
private static readonly Lazy<Singleton> lazy =
new Lazy<Singleton>(() => new Singleton());
public static Singleton Instance
{
get {
return lazy.Value;
}
}
private Singleton()
{
}
}
我在這裏使用委託構造單例。在這種情況下如何使用鎖。您建議將'EntityId'移動到'IMyConfigData'並將'IMyConfigData'聲明爲一個類(而不是'Interface') – liv2hak
我不確定代表如何訪問它。我已經更新了完整實施的答案。我的建議是將EntityId移動到IMyConfigData並將IMyConfigData聲明爲一個類,如果根本沒有其他地方引用EntityId的話。 – Rex