У меня есть вопрос о том, как работает InstanceScope.Singleton, потому что здесь я получаю неожиданные результаты:
У меня есть служба, которая зависит от Дао
public MetaProjectService(IMetaProjectDao metaProjectDao)
{
_metaProjectDao = metaProjectDao;
}
и у меня есть Dao, который зависит от ISession (Nhibernate)
public MetaProjectDao(ISession nhSession)
: base(nhSession)
{}
и для карты структуры у меня есть следующее:
ForRequestedType<IMetaProjectService>()
.TheDefaultIsConcreteType<MetaProjectService>();
//.CacheBy(InstanceScope.Singleton);
ForRequestedType<IMetaProjectDao>()
//.TheDefaultIsConcreteType<MetaProjectDao>()
//.CacheBy(InstanceScope.Singleton)
.TheDefault
.Is.ConstructedBy(() =>
{
var session = ObjectFactory
.GetNamedInstance<ISessionFactory>(
MetaProjectDao.SESSION_FACTORY_NAME)
.GetCurrentSession();
return new MetaProjectDao(session);
});
Вопрос. Если я раскомментирую определение для кэширования IMetaProjectService как InstanceScope.Singleton, оно не будет работать при последующих запросах, поскольку по-прежнему будет содержать ссылку на сборку экземпляра IMetaProject при первом запросе. Есть и другие зависимости, которые я опустил для ясности. Итак, вопрос заключается в том, как мне создать IMetaProjectDao для каждого запроса и сделать так, чтобы на этот новый экземпляр ссылался IMetaProjectService, имея IMetaProjectService как singleton.