2011-02-28 4 views
0

カスタムドメインサービス内のリポジトリにアクセスしている状況があり、それらを注入することをお勧めします。Ria Services(Custom DomainService)を使用したNinject

I.e.

[EnableClientAccess()] 
    public class UserDomainService : DomainService 
    { 

    public IUserRepository repo; 

    public UserDomainService(IUserRepository userRepo) 
     : base() 
    { 
     repo = userRepo;    
    } 

    public IEnumerable<User> GetUsers() 
    { 
     return this.repo.GetUsers(); 
    } 

私は、多くのドメインサービスを持っていると私は不明だと、私のドメインサービスのすべてのための私のタイプのバインディングを保持し、カーネルにロードするためにNinjectモジュールを定義する場所です。私はこれをどうやって行うのかを実証するための簡単な例を探しています。

+0

私は見たことがありませんが、もし見つけたら、私は興味があります。今のところ、Ninjectを使用するカスタムDomainServiceFactoryを作成できるはずです。 –

+0

@Kyle McClellan - 私が考えた1つの選択肢は、NinjectHttpApplicationクラスを拡張し、Global.asaxのバインディングとモジュールを定義することでした。しかし、私は、これらのDomainServicesがどのように/どこで動作するかをよく理解していないと思います。 Global.asaxコードは正常に動作しましたが、カスタムドメインサービス内のIUserRepositoryは、上記のコードが実行されたときにもNULLです。私は彼らが同じ文脈の下で動作していないと私に言うと思いますか?私はあなたのアプローチを取って工場に行くかもしれないと思います... –

答えて

0

私はNinject.Extensions.Webで正しい追跡をしていました - デフォルトのGlobal.asaxの代わりにNinjectHttpApplicationを拡張しました。

は、提供するページベースクラスのようにカスタムドメインサービスを挿入できないように、KernelContainer(新しく定義されたNinjectモジュールへのアクセス)を公開していません。

だから... ...私は終わった

は公に静的カーネルを公開するのHttpApplicationを拡張する類似したクラスを作成しました。次に、すべてのドメインサービスが継承する基本ドメインサービスを作成しました。コンストラクタ内で、次に私のドメインサービスインスタンスを呼び出す呼び出しを行います。

[EnableClientAccess()] 
    public class BaseDomainService : DomainService 
    { 
     public BaseDomainService() 
      : base() 
     { 
      MyCustomStaticKernelContainer.Inject(this); 
     } 
    } 
+0

なぜDomainService.Factoryを使用しませんでしたか? IDomainServiceFactory(DomainService.Factoryの戻り値の型)のCreateDomainServiceメソッドは、Ria ServicesがDomainServiceのインスタンスを内部的にどのように使用するかを示し、ユーザーが作成プロセスに接続するための推奨方法です。スタックオーバーフローに関する良い答えはこちら http://stackoverflow.com/questions/1294331/net-ria-services-domainservice-needs-a-parameterless-constructor DomainFiles.FactoryをAutoFacコンテナで使用した例:http://code.google.com/p/autofac/wiki/RIAServices – JJS