2012-02-06 58 views
1

我在使用溫莎城堡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)。 – 2012-02-06 11:09:34

+0

@weston,如果'LocationDao'不能實現所有的'abstract'方法,它將無法編譯。 – svick 2012-02-06 11:46:58

+0

@svick對不起,你是對的,不理我的評論基督徒 – weston 2012-02-06 11:51:09

回答

2

如果您要將容器告訴ILocationDao,則不應將結果轉換爲LocationDao,只需將其作爲ILocationDao即可。

如果您確定使用界面不夠用,請將LocationDao註冊爲LocationDao並解決該問題。