В принципе, я хотел бы сделать что-то подобное в начале моего класса (я знаю, что это не работает, поскольку это не константа) ....
[XmlStorage(IsSingleStorageFile = false, IsSubordinate = true,
StorageLocation = "posts" + GetBlogId()]
Где GetBlogId () будет статическим служебным методом.
Я создаю среду хранения XML для движка блогов, который я пишу (частично учебное упражнение, частично потому, что я хочу вернуть что-то в открытый исходный код), и я подумал, что самый аккуратный способ определения местоположения хранилища будет использовать пользовательские атрибуты, так как я все равно буду использовать datacontractserializer.
Моя единственная проблема в настоящее время - это определение местоположения подчиненного типа, местоположение которого будет определяться идентификатором их родителя. например, сообщение <Блог. </p>
Мой путь к хранилищу будет примерно таким ...
сообщений \ blogid \ postid.xml
Где идентификатор блога будет определен путем анализа URL и возврата связанного блога. Это позволило бы мне размещать несколько блогов в одной установке, сохраняя при этом отдельные файлы хранилища сообщений, чтобы уменьшить накладные расходы памяти при загрузке сообщений.
Это прямое отрицание или есть лучший способ для меня сделать то, что я пытаюсь?
Edit:
После ответа Джона я попробовал это ...
private static string GetSubordinatePath(Type type)
{
if (typeof(ISubordinate).IsAssignableFrom(type))
{
object instance = Activator.CreateInstance(type);
return (instance as ISubordinate).ParentGuid.ToString();
}
else
{
// TODO: Localize this.
throw new ArgumentException(
String.Format(
CultureInfo.CurrentCulture,
"The specified type '{0}' does not impliment the ISubordinate interface. Please edit the source appropriately to enable storage.",
type.GetType().Name));
}
}
Который будет вызываться из класса, читающего пользовательский атрибут.
Это хорошо работает ..