문제

I've been using S#arp and have updated the Generate method in AutoPersistenceModelGenerator to work with Fluent NHibernate 1.1. I also changed its assembly name from MyProject.Data to MyProject.Infrastructure and I'm not sure which has caused the problem:

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

At the point that Castle Windsor registers the assembly containing the above method...

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

...it throws this exception:

Method 'Generate' in type 'MyProject.Infrastructure.NHibernateMaps.AutoPersistenceModelGenerator' from assembly 'MyProject.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation.

I've completely cleaned the project and rebuilt it but the error keeps happening.

I don't know if this makes a difference but the above method is actually called directly in 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"));
     }

I've tried removing the IOC registration but the same error is then thrown on this method:

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

UPDATE

I recreated my project and unwent the same process again - the error appears to happen when I update Fluent NHibernate from 1.0 to 1.1. Any ideas why?

도움이 되었습니까?

해결책

I believe this was caused by part of the S#arp architecture assemblies referencing the old Fluent NHibernate version.

I updated the S#arp assemblies to 1.6 (which now uses FNH 1.1) and it now works.

다른 팁

I ran into this same issue but am not ready to update my sharparch version, also I am using the 2.0.0.0 version of fluentnhibernate. You can work around this by using an assembly binding redirect in your app.config or web.config. Like this:

    <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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top