Я пытаюсь автоматически зарегистрировать сущности NHibernate, поскольку NCommon IRepository использует Castle, и я не могу понять это.
В предыдущем проекте мы использовали autofac, и вот как мы это сделали:
autofacContainerBuilder.RegisterGeneric(typeof (NHRepository<>))
.As(typeof (IRepository<>))
.InstancePerLifetimeScope();
Есть ли эквивалент для Касла? Спасибо!
EDIT:
Это настолько близко, насколько я могу это понять, но ComponentActivator не удается создать экземпляр NHRepository:
.Register(Component.For(typeof(IRepository<>))
.ImplementedBy(typeof(NHRepository<>))
.LifeStyle.Transient)
ComponentActivator не удалось создать экземпляр NCommon.Data.NHibernate.NHRepository
Вспышка вручную взрывается:
NHRepository<MyEntity> blah = new NHRepository<MyEntity>();
с:
* Ссылка на объект не установлена на экземпляр объекта в Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current () в c: \ Home \ Chris \ Projects \ CommonServiceLocator \ main \ Microsoft.Practices.ServiceLocation \ ServiceLocator.cs: строка 17 *
РЕШИТЬ:
Мне не хватало этого:
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(Container));
WindsorServiceLocator доступен здесь:
http://commonservicelocator.codeplex.com/wikipage?title=Castle%20Windsor%20Adapter&referringTitle=Home
Подробнее здесь:
http://prashantbrall.wordpress.com/2010/11/22/service-locator-pattern-with-windsor-castle/