私はこの問題に約 2 週間取り組んできましたが、1 つの非常に具体的なテストに切り詰めました。
基本的に、NHibernate セッション ファクトリを構成し、[Export(typeof(ISession))] 機能を持つセッション ファクトリがあります。
このクラスのコードは次のとおりです。
[Export(typeof(SessionFactoryMock))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class SessionFactoryMock
{
private readonly ISessionFactory sessionFactory;
public SessionFactoryMock()
{
sessionFactory =
Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008.ConnectionString(c => c
.Server(@".\SQLExpress")
.Database("Test")
.TrustedConnection()))
.Mappings(configuration => configuration.FluentMappings.Add<TestEntityMap>())
.ExposeConfiguration(c => new SchemaExport(c).Execute(true, true, false))
.BuildSessionFactory();
}
[Export(typeof(ISession))]
public ISession GetSession()
{
return sessionFactory.OpenSession();
}
}
そして、私は次のテストを使用しています:
[TestMethod]
public void CanGetISession()
{
Assembly executing = Assembly.GetExecutingAssembly();
var cat = new AggregateCatalog(new[]
{
new AssemblyCatalog(executing)
});
var container = new CompositionContainer(cat);
var batch = new CompositionBatch();
batch.AddExportedValue(container);
container.Compose(batch);
var compositionInfo = new CompositionInfo(cat, container);
using (var stringWriter = new StringWriter())
{
CompositionInfoTextFormatter.Write(compositionInfo, stringWriter);
string compositionDetail = stringWriter.ToString();
bool errorDetected = compositionDetail.Contains("[Primary Rejection]");
if (errorDetected)
{
Assert.Fail(compositionDetail);
}
}
var export = container.GetExport<ISession>();
var exportedValue = export.Value;
Assert.IsNotNull(exportedValue);
}
このテストは、次のメッセージで継続的に失敗します。
System.ComponentModel.Composition.CompositionContractMismatchException: タイプ 'MefnHibernateFail.SessionFactoryMock.GetSession (ContractName="NHibernate.ISession")' の基になるエクスポートされた値をタイプ 'NHibernate.ISession' にキャストできません。
これは非常に役に立ちません。
コードからすべての Fluent nHibernate および NHibernate ライブラリを構築しており、サンプル ソリューションがあります。
私は今、ほとんど行き詰まっているので、誰かがこれに光を当てることができることを本当に望んでいます.
完全なソース コードはここにあります:ソース