2

NHibernateRepository を使用したい IRepository インターフェイスがあります。

構造マップを使用して構成するにはどうすればよいですか?

protected void ConfigureDependencies()
{
    ObjectFactory.Initialize(
        x =>
            {
                x.For<ILogger>().Use<Logger>();
                x.For<IRepository<T>>().Use<NHibernateRepository<T>>();
            }
        );
}

T でエラーが発生します。

4

4 に答える 4

2

IRepository<>のすべての終了タイプを の対応する終了タイプにマップできるようにする場合はNHibernateRepository<>、次を使用します。

x.For(typeof(IRepository<>)).Use(typeof(NHibernateRepository<>))
于 2012-04-16T13:13:53.003 に答える
0

この行は、汎用パラメーターの置換を期待していますT

x.For<IRepository<T>>().Use<NHibernateRepository<T>>();

つまり、どのタイプTがリポジトリに保存されますか?NHibernateRepositoryの実装としてクラスを選択しましたIRepositoryが、どの内部クラスが格納されるかを示していません。

または、非汎用IRepositoryの使用を検討してください。ここを参照してください:汎用リポジトリ-IRepository<T>またはIRepository

于 2012-04-15T23:24:08.023 に答える
0

おそらく<T>ダイナミックに置き換えますか?

x.For<IRepository<dynamic>>().Use<NHibernateRepository<dynamic>>();

2番目のポイントに関しては、シングルトン/サービスロケーターパターンはかなり白熱した議論です。

于 2012-04-15T23:24:44.723 に答える
0

この記事をご覧ください。基本的に、あなたがやりたいことは次のようなものです:

public void ConfigureDependencies()
{
    ObjectFactory.Initialize(x => x.Scan(cfg =>
    {
        cfg.TheCallingAssembly();
        cfg.IncludeNamespaceContainingType<Logger>();
        cfg.ConnectImplementationsToTypesClosing(typeof(NHibernateRepository<>));
    }));
}

ApplicationContext 静的クラスについて: 本当に分野横断的な懸念がある場合は、特に問題はないと思います。

于 2012-04-16T07:00:11.080 に答える