Может это уже известная проблеба. TypeAccessor пытается второй раз создать то же тип
namespace BltGym
{
public class Gym
{
public abstract class Entity
{
public abstract int Id { get; set; }
public abstract String Name { get; set; }
public static Entity CreateInstance() { return TypeAccessor<Entity>.CreateInstanceEx(); }
}
public abstract class EntityAccessor : DataAccessor<Entity>
{
public new abstract int Insert(Entity entiry);
public static EntityAccessor CreateInstance(DbManager dbManager)
{
return DataAccessor.CreateInstance<EntityAccessor>(dbManager);
}
}
public static void Main(string[] args)
{
TypeFactory.SetGlobalAssembly(@"c:\tmp\BltGym.dll");
DbManager.AddDataProvider(/*...*/);
DbManager.AddConnectionString(/*...*/);
DbManager db = new DbManager();
Entity entity = Entity.CreateInstance();
EntityAccessor accessor = EntityAccessor.CreateInstance(db);
accessor.Insert(entity);
}
}
}
в результате получам
TypeBuilderException
Could not build the 'BltGym.Gym.BLToolkitExtension.Entity' type: Duplicate type name within an assembly.
То есть что происходит. Entity entity = Entity.CreateInstance() инициирует вызов
TypeAccessor.GetAccessor(originalType = typeof(BltGym.Gym+Entity))
который зоздаёт BltGym.Gym.BLToolkitExtension.Entity а затем BltGym.Gym.BLToolkitExtension.Entity.TypeAccesssor. Далее accessor.Insert(entity) внутри себя создаёт ObjectMapper для entity (типа BltGym.Gym.BLToolkitExtension.Entity) что приводит к вызову
TypeAccessor.GetAccessor(originalType = typeof(BltGym.Gym.BLToolkitExtension.Entity))
в результате второй раз создаётся тип BltGym.Gym.BLToolkitExtension.Entity.TypeAccessor