views:

126

answers:

1

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?

+1  A: 

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.

David Neale