Метод Generate типа xxx не имеет реализации - S # arp - ОБНОВЛЕНО

Я использовал S # arp и обновил метод Generate в AutoPersistenceModelGenerator для работы с Fluent NHibernate 1.1. Я также изменил имя сборки с MyProject.Data на MyProject.Infrastructure, и я не уверен, что вызвало проблему:

    public AutoPersistenceModel Generate()
    {
        return AutoMap.Assemblies(new myProjectMappingConfiguration(),
                                  typeof (MyClass).Assembly)
            .Conventions.Setup(GetConventions())
            .IgnoreBase<Entity>()
            .IgnoreBase(typeof (EntityWithTypedId<>))
            .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
    }

В момент, когда Castle Windsor регистрирует сборку, содержащую вышеуказанный метод ...

        container.Register(
            AllTypes.Pick()
            .FromAssemblyNamed("MyProject.Infrastructure")
            .WithService.FirstNonGenericCoreInterface("MyProject.Core"));

... он выбрасывает это исключение:

Метод Generate в типе MyProject.Infrastructure.NHibernateMaps.AutoPersistenceModelGenerator из сборки MyProject.Infrastructure, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null не имеет реализации.

Я полностью очистил проект и перестроил его, но ошибка повторяется.

Я не знаю, имеет ли это значение, но указанный выше метод на самом деле вызывается непосредственно в Global.asax:

    private void InitializeNHibernateSession()
    {
        var cfg = NHibernateSession.Init(
            webSessionStorage,
            new string[] { Server.MapPath("~/bin/MyProject.Infrastructure.dll") },
            new AutoPersistenceModelGenerator().Generate(),
            Server.MapPath("~/NHibernate.config"));
     }

Я попытался удалить регистрацию IOC, но в этом методе возникает та же ошибка:

    public void Initialize(Action initMethod)
    {
        if (!this.NHibernateSessionIsLoaded)
        {
            lock (syncLock)
            {
                if (!this.NHibernateSessionIsLoaded)
                {
                    initMethod();
                    this.NHibernateSessionIsLoaded = true;
                }
            }
        }
    }

ОБНОВЛЕНИЕ

Я воссоздал свой проект и снова выполнил тот же процесс - ошибка возникает, когда я обновляю Fluent NHibernate с 1.0 до 1.1. Есть идеи, почему?


person David Neale    schedule 19.08.2010    source источник
comment
Вы уверены, что не загружаете старую версию сборки - возможно, из GAC? См.: http://stackoverflow.com/questions/948785/typeloadexception-says-no-implementation-but-it-is-implemented   -  person PatrickSteele    schedule 19.08.2010


Ответы (2)


Я считаю, что это было вызвано тем, что часть сборок архитектуры S # arp ссылается на старую версию Fluent NHibernate.

Я обновил сборки S # arp до версии 1.6 (которая теперь использует FNH 1.1), и теперь она работает.

person David Neale    schedule 20.08.2010

Я столкнулся с той же проблемой, но я не готов обновить свою версию Sharparch, также я использую версию fluentnhibernate 2.0.0.0. Вы можете обойти это, используя перенаправление привязки сборки в вашем app.config или web.config. Нравится:

    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="FluentNhibernate" publicKeyToken="8aa435e3cb308880" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="2.0.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>
person mockobject    schedule 02.02.2011