Мне нужно создать базовый класс, как в следующем коде.
public class ResourceBase
{
protected static IDictionary<string, XDocument> resources;
protected static IDictionary<string, XDocument> Resources
{
get
{
if (resources == null)
{
// cache XDocument instance in resources variable seperate by culture name.
// load resx file to XDocument
}
return resources;
}
}
protected static string GetString(string resourceKey)
{
return GetString(resourceKey, System.Threading.Thread.CurrentThread.CurrentUICulture.Name);
}
protected static string GetString(string resourceKey, string cultureName)
{
// get data from XDocument instance
var result = (
from rs in Resources
let node = rs.Value.Root.Elements(XName.Get("data")).SingleOrDefault<XElement>(x => x.Attribute(XName.Get("name")).Value == resourceKey)
where
(rs.Key == DEFAULT_CULTUREKEY || cultureName == rs.Key) &&
node != null
orderby cultureName == rs.Key descending
select node.Element(XName.Get("value"))
).FirstOrDefault<XElement>();
return result.Value;
}
}
Затем я создаю дочерний класс, как показано в следующем коде.
public class MainResource : ResourceBase
{
public static string AppName
{
return GetString("AppName");
}
}
public class OtherResource : ResourceBase
{
public static string OtherName
{
return GetString("OtherName");
}
}
У меня есть проблема из-за переменной ресурса в базовом классе. Все дочерние классы используют некоторую переменную Resource. Таким образом, они всегда используют один и тот же кэшированный экземпляр XDocument. У вас есть идея исправить мой исходный код?
PS. Я нашел некоторый атрибут, такой как ContextStaticAttribute, который указывает, что значение статического поля уникально для определенного контекста. Я думаю конкретный контекст должен быть нить разницы. Поэтому я не могу использовать его для решения этого вопроса.
Спасибо