Метод 'Generate' в типе xxx не имеет реализации - S # arp - ОБНОВЛЕНО - PullRequest
1 голос
/ 19 августа 2010

Я использую 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.Есть идеи почему?

Ответы [ 2 ]

3 голосов
/ 20 августа 2010

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

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

2 голосов
/ 03 февраля 2011

Я столкнулся с той же проблемой, но не готов обновить версию sharparch, также я использую версию 2.0.0.0 fluentnhibernate. Вы можете обойти это, используя перенаправление привязки сборки в вашем 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>
...