Castle Windsor の NHibernateFacility を使用しているときに、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 グループに投稿したところ、アプリに互換性のないバージョンの Windsor が含まれていることが示唆されました。これは本当ですか、それとも何か他のことが起こっているように見えますか?