TypeAccessor: Duplicate type name within an assembly.
От: Sashko Россия http://www.dc.baika.ru/
Дата: 24.01.06 09:31
Оценка: 63 (1)
Может это уже известная проблеба. 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.