2

我有 IRepository 接口,我想使用 NHibernateRepository。

如何使用结构图配置它?

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>>();

至于第二点,Singleton / Service Locator 模式是一个相当激烈的争论。

于 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 回答