У меня есть вопрос о том, как работает InstanceScope.Singleton, потому что я получаю некоторые неожиданные результаты:
У меня есть служба, которая зависит от Дао
public MetaProjectService(IMetaProjectDao metaProjectDao)
{
_metaProjectDao = metaProjectDao;
}
и у меня есть Дао, которое зависит от 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. Он не будет работать с последующими запросами, так как он будет содержать ссылку на сборку экземпляра IMetaProject в первом запросе. Есть и другие зависимости, которые я пропустил для ясности. Таким образом, вопрос заключается в том, как мне создать IMetaProjectDao для каждого запроса и сделать так, чтобы IMetaProjectService ссылался на этот новый экземпляр при одновременном использовании IMetaProjectService в качестве одиночного.