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?