2016-07-18 4 views
0

私は、インターフェイスを実装するビジネスオブジェクト(bo)を持つサービスを持っています。ボーもインターフェイスを実装しています。どのように私はサービスとボーを記述するインターフェイスを宣言することができますか?ここでCでネストされたインターフェイスをキャストする

いくつかのコード:

// Business object with interface 
public interface IBoBase { } 
public class Bo : IBoBase { } 

// Service with interface 
public interface IService<TBo> where TBo : IBoBase 
{ 
    TBo Get(); 
    void Set(TBo bo); 
} 
public class Service : IService<Bo> 
{ 
    private Bo _bo; 
    public Bo Get(){return _bo;} 
    public void Set(Bo bo) { _bo = bo; } 
} 

// Usage 
public class SubService 
{ 
    private readonly List<IService<IBoBase>> _injectedService; 
    public SubService(Service injectedService) 
    { 
     _injectedService = new List<IService<IBoBase>> 
      { 
       injectedService // cannot cast to IService<IBoBase> ... why? 
      }; 
    } 
} 

誰でもインターフェースを設計する方法、アイデアを持っていますので、コードの例で説明したように、私はそれを使用することができますか?

+0

可能な重複[ネストされたインタフェース:?キャストのIDictionary <処理鍵、IListの>のIDictionaryに<処理鍵、IEnumerableを>](http://stackoverflow.com/questions/10399568/nested-interfaces-cast- idbrevtkey-ilisttvalue-to-idictionarytkey-ie) –

+0

'Service'クラスは' IService 'を実装していないので、なぜあなたはそれをキャストできますか? 'IService 'は 'IService TBo:IBoBase'と等しくありません。 – Maarten

+0

これは私の問題と疑問です。タイプされたBOをインターフェイスとして使用してサービスを記述するにはどうすればよいですか。協調性の異なるトリックはありますか? – Smuddy

答えて

0

右キャスティングは以下の通りですが、これはあなたが期待していることがわかりません。

public class SubService 
{ 
    private readonly List<IService<IBoBase>> _injectedService; 
    public SubService(*IService<IBoBase>* injectedService)** 
    { 
     _injectedService = new List<IService<IBoBase>> 
     { 
      injectedService 
     }; 
    } 
} 
+0

いいえ、私のサービスはAutofacによって注入されているので、サービスを直接指定する必要があります。それ以外の場合は、Autofacでキャストの問題が発生します。ここではサービスをIService として登録できません。 – Smuddy

関連する問題