使用 NHibernateFacility for Castle Windsor 时,系统会提示我输入一个名为 EnumerableExtensions.cs 的文件。我已经通过以下步骤复制了它(所有包都是从 NuGet 安装的):
- 创建一个新的 WPF 项目
- 安装 Castle.Core 3.1.0
- 安装 Castle.Windsor 3.1.0
- 安装 Castle.FactorySupportFacility 3.1.0
- 安装 Castle.Transactions 3.2.207.2207
- 安装 Castle.Facilities.AutoTx 3.2.207.2207
- 安装 NHibernate 3.3.1.4000
- 安装 Fluent NHibernate 1.3.0.733
- 安装 Castle.Facilities.NHibernate 0.7.1.23602
重写 App.xaml.cs 中的 OnStartup() 以创建 Windsor 容器并向其添加设施。请参阅下面的代码。
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); IWindsorContainer container = new WindsorContainer(); container.AddFacility<AutoTxFacility>(); container.Register( Component.For<INHibernateInstaller>() .ImplementedBy<FluentNHibernateInstaller>()); container.AddFacility<NHibernateFacility>(); }
这是 FluentNHibernateInstaller.cs 中的代码
public class FluentNHibernateInstaller : INHibernateInstaller
{
public FluentConfiguration BuildFluent()
{
return Fluently.Configure();
}
private IPersistenceConfigurer SetupDatabase()
{
return MsSqlConfiguration.MsSql2008
.ConnectionString(c => c
.Server("Server")
.Database("Database")
.Username("User")
.Password("Password"));
}
public Maybe<NHibernate.IInterceptor> Interceptor
{
get { return Maybe.None<NHibernate.IInterceptor>(); }
}
public bool IsDefault
{
get { return true; }
}
public void Registered(ISessionFactory factory)
{
}
public string SessionFactoryKey
{
get { return "sf.default"; }
}
}
当我运行应用程序时,这是我看到的对话框:
对我来说,这似乎是 DLL 有问题,但是当我在 Castle Project Google Group 上发布有关此内容时,有人建议我在我的应用程序中有不兼容的 Windsor 版本。这是真的还是看起来像是在发生其他事情?