AutoMapper / Castle - нарушены правила безопасности наследования при переопределении члена - PullRequest
2 голосов
/ 03 сентября 2010

Я получаю следующее исключение при вызове любого из моих методов Mapper.Map.

Нарушение правил безопасности наследования при переопределении члена: 'Castle.Core.Logging.LevelFilteredLogger.InitializeLifetimeService ()'. Доступность по безопасности метода переопределения должна соответствовать безопасная доступность переопределяемого метода.

Я использую последнюю сборку AutoMapper, загруженную из codeplex внутри моего приложения S # arp 1.6, работающего на .Net 4.0 (который использует версию 1.2.0.6623 из Castle.Core).

Я полагаю, это как-то связано с новыми настройками безопасности .Net 4.0, которые я не совсем понимаю.

Есть ли способ это исправить?

Пол

Ответы [ 2 ]

1 голос
/ 04 сентября 2010

Я попробовал кое-что из небольшого поиска, который решил мою проблему, я не уверен, что это идеальный или рекомендуемый подход, но он работал.

Я добавил это в проекты Automapper 'AssemblyInfo.cs'.file:

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

Я перекомпилировал и использовал новую DLL, и все работало нормально.

Пожалуйста, оставляйте комментарии, если это не рекомендуется, или если есть лучший подход.

Пока что я оставлю свой собственный ответ как правильный.

Спасибо за помощь, хотя!

ОБНОВЛЕНИЕ:

Мои отображениядовольно просты, извините за весь код, но подумал, что он может вам помочь:

Код инициализации:

Mapper.Reset();
Mapper.Initialize(x =>
{
    x.AddProfile<LeadsProfile>();
    //x.AddProfile<AttendeeProfile>();
});

Mapper.AssertConfigurationIsValid();

LeadsProfile.cs

public class LeadsProfile : AutoMapper.Profile
        {
            public override string ProfileName
            {
                get { return "LeadsProfile"; }
            }

            protected override void Configure()
            {

                Mapper.CreateMap<Lead, LeadDto>();

                Mapper.CreateMap<Lead, LeadDetailDto>();

                Lead lead = null;
                Mapper.CreateMap<int, LeadDetailDto>()
                    .BeforeMap((s, d) => lead = ServiceLocator.Current.GetInstance<ILeadRepository>().FindOne(s))
                    .ForMember(d => d.Id, x => x.MapFrom(s => lead.Id))
                    .ForMember(d => d.Fullname, x => x.MapFrom(s => lead.Fullname))
                    .ForMember(d => d.TelNumber, x => x.MapFrom(s => lead.TelNumber))
                    .ForMember(d => d.BookedAppointmentDate, x => x.MapFrom(s => lead.BookedAppointmentDate));

            }

        }

Исходный класс

public class Lead : Entity
    {
        public Lead()
        {
            Status = Common.LeadStatus.Raw;
            CreatedDate = DateTime.Now;
        }

        public Lead(Branch branch, Promoter promoter, LeadSource source, string fullname, string telNumber, Address address, DateTime apptDate) : this()
        {
            this.Branch = branch;
            this.Promoter = promoter;
            this.Source = source;
            this.Fullname = fullname;
            this.TelNumber = telNumber;
            this.Address = address;
            this.BookedAppointmentDate = apptDate;
        }

        public virtual Branch Branch { get; set; }
        public virtual Promoter Promoter { get; set; }
        public virtual LeadSource Source { get; set; }
        public virtual Common.LeadStatus Status { get; set; }

        public virtual bool ExistingCustomer { get; set; }
        public virtual bool IsDoso { get; set; }

        public virtual string TitlePrefix { get; set; }
        public virtual string Fullname { get; set; }
        public virtual string TelNumber { get; set; }
        public virtual string MobileNumber { get; set; }

        public virtual DateTime BookedAppointmentDate { get; set; }

        public virtual Address Address { get; set; }

        public virtual Store Store { get; set; }

        public virtual IList<LeadProduct> Products { get; set; }
        public virtual IList<Appointment> Appointments { get; set; }
        public virtual IList<Sale> Sales { get; set; }

        public virtual DateTime CreatedDate { get; set; }
    }

Направление Dto's

public class LeadDto
    {
        public int Id { get; set; }
        public string Fullname { get; set; }
        public string TelNumber { get; set; }
        public DateTime BookedAppointmentDate { get; set; }
    }

public class LeadDetailDto
    {
        public int Id { get; set; }
        public string Fullname { get; set; }
        public string TelNumber { get; set; }
        public DateTime BookedAppointmentDate { get; set; }
    }
0 голосов
/ 03 сентября 2010

Я бы попробовал обновить Castle.Core до 2.5, который был построен и протестирован специально для .net 4.0. (Должен отметить, что Castle.Core 2.5 также доступен для .net 3.5 и SL 3/4)

Похожие вопросы:

...