2012-02-06 2 views
1

У меня проблемы с решением общих интерфейсов/классов с использованием Windsor Castle 2.5. У меня есть следующие классы и интерфейсы:Решающие дженерики с замком Виндзор

public interface IGenericDao<T> : IDao 
public abstract class GenericDao<T> : IGenericDao<T> where T:class, new() 
public class LocationDao : GenericDao<Location>, ILocationDao 

Для регистрации я использую следующие строки кода

c.Register(
      Component.For(typeof(IGenericDao<>)) 
       .ImplementedBy(typeof(GenericDao<>))); 

c.Register(Component.For<ILocationDao>().ImplementedBy<LocationDao>()); 

Теперь, когда я пытаюсь решить ILocationDao

var i = c.Resolve<ILocationDao>(); 

возвращаемое значение - Castle.Proxies.ILocationDaoProxy, и я не могу отличить его от LocationDao.

Когда я удалить GenericDao<Location> из класса `LocationDao»

public class LocationDao : ILocationDao 

все работает отлично. Поэтому я предполагаю, что я делаю что-то неправильно с регистрацией.

Не могли бы Вы помочь мне?

+0

@weston Это реализация [GenericDao.cs] (http://pastebin.com/ZTnCfaMM), и вот ее реализация [LocationDao.cs] (http://pastebin.com/BcsC1ePR). –

+0

@weston, если 'LocationDao' не будет реализовывать все« абстрактные »методы, он не сможет скомпилировать. – svick

+0

@svick Да, извините, вы правы, игнорируйте мой комментарий Christian – weston

ответ

2

Если вы сообщаете контейнеру, что хотите ILocationDao, вы не должны отличать результат от LocationDao, просто используйте его как ILocationDao.

Если вы уверены, что для этого недостаточно использования интерфейса, зарегистрируйте LocationDao как LocationDao и решите это.

Смежные вопросы