我有IRepository接口,我想使用NHibernateRepository。
如何使用结构图配置它?
protected void ConfigureDependencies()
{
ObjectFactory.Initialize(
x =>
{
x.For<ILogger>().Use<Logger>();
x.For<IRepository<T>>().Use<NHibernateRepository<T>>();
}
);
}
我在T上收到错误。
答案 0 :(得分:2)
如果您希望能够将IRepository<>
的所有结束类型映射到NHibernateRepository<>
的相应结束类型,请使用:
x.For(typeof(IRepository<>)).Use(typeof(NHibernateRepository<>))
答案 1 :(得分:0)
此行期望替换泛型参数T
:
x.For<IRepository<T>>().Use<NHibernateRepository<T>>();
即,哪种类型T
将存储在存储库中?您已选择NHibernateRepository
类作为IRepository
的实现,但尚未显示将存储哪个内部类。
或者,查看使用非通用IRepository,请参阅此处:Generic repository - IRepository<T> or IRepository
答案 2 :(得分:0)
或许用动态替换<T>
?
x.For<IRepository<dynamic>>().Use<NHibernateRepository<dynamic>>();
至于第二点,单身/服务定位模式是一个相当激烈的争论。
答案 3 :(得分:0)
看看this article。基本上,你想要做的是这样的事情:
public void ConfigureDependencies()
{
ObjectFactory.Initialize(x => x.Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespaceContainingType<Logger>();
cfg.ConnectImplementationsToTypesClosing(typeof(NHibernateRepository<>));
}));
}
关于ApplicationContext静态类:如果你真的有一个跨领域的问题,那么我认为它没有什么问题。