57 lines
1.8 KiB
C#
57 lines
1.8 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Xml;
|
|
using oodb.attributes;
|
|
|
|
namespace oodb.mapping.collections
|
|
{
|
|
public class ISetExtendedHandling : ExtendedFieldHandling
|
|
{
|
|
public Type ReferencedType { get; }
|
|
public FieldInfo ReferencedField { get; protected set; }
|
|
|
|
public Type ImplementationType { get; }
|
|
|
|
public ISetExtendedHandling(OODB oodb,FieldInfo fieldInfo)
|
|
:base(oodb,fieldInfo)
|
|
{
|
|
ReferencedType = fieldInfo.FieldType.GetGenericArguments()[0];
|
|
ImplementationType = typeof(ISetImplementation<>).MakeGenericType(ReferencedType);
|
|
}
|
|
|
|
public override void Initialize()
|
|
{
|
|
ReferencedFieldAttribute referencedFieldAttribute = FieldInfo.GetCustomAttribute<ReferencedFieldAttribute>();
|
|
string refFieldName = referencedFieldAttribute != null ? referencedFieldAttribute.FieldName : FieldInfo.DeclaringType.Name;
|
|
ReferencedField = ReferencedType.GetField(refFieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
|
|
|
|
OODB.StorageAdapter.GetSearchIndex(ReferencedField);
|
|
}
|
|
|
|
public override void Attach(Persistent persistent)
|
|
{
|
|
object iset = FieldInfo.GetValue(persistent);
|
|
|
|
if (ImplementationType != iset.GetType())
|
|
{
|
|
object impl = Activator.CreateInstance(ImplementationType,OODB,FieldInfo,persistent);
|
|
FieldInfo.SetValue(persistent, impl);
|
|
}
|
|
|
|
}
|
|
|
|
public override void Detach(Persistent persistent)
|
|
{
|
|
}
|
|
|
|
public override void Load(XmlElement persistenceElement, Persistent persistent)
|
|
{
|
|
Attach(persistent);
|
|
}
|
|
|
|
public override void Save(XmlElement persistenceElement, Persistent persistent)
|
|
{
|
|
}
|
|
}
|
|
}
|