2012-02-06 15 views
1

Windsor Castle 2.5を使用して一般的なインターフェイス/クラスを解決する際に問題があります。私はILocationDaoCastle Windsorでジェネリックスを解決する

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

を解決しようとしているときは、登録のために

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>()); 

今すぐ次のコード行を使用しています:私は、次のクラスおよびインタフェースを持っています戻り値は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'がすべての' abstract'メソッドを実装しなければ、コンパイルに失敗します。 – svick

+0

@svickはい申し訳ありませんが、私のコメントを無視クリスチャン – weston

答えて

2

ILocationDaoをコンテナに伝えている場合は、結果をLocationDaoにキャストしないでください。ILocationDaoとして使用してください。

インターフェイスが十分でない場合は、LocationDaoLocationDaoと登録して解決してください。

関連する問題