2016-06-02 1 views
1

Silverlightアプリケーションを作成しましたが、WCF RIA Servicesを使用して実現したいと考えています。私のソリューションには3つのプロジェクトがあります:Unityコンテナを使用したIUnitOfWork to DomainServiceコンストラクタ

  1. すべてのdbロジックとエンティティを含むデータアクセスレイヤーライブラリ。私はカスタムのDomainServiceクラスを作成し

    public interface IUnitOfWork : IDisposable 
    { 
        IRepository<Customer> Customers { get; } 
        IRepository<Product> Products { get; } 
        IRepository<Order> Orders { get; } 
        void Save(); 
    } 
    
  2. WCF RIA Servicesプロジェクト:私はそれと通信するIUnitOfWorkインタフェースを使用します。

    [EnableClientAccess()] 
    public void StoreService : DomainService 
    { 
        private IUnitOfWork _repository; 
        public StoreService(IUnitOfWork repository) 
        { 
          _repository = repository; 
        } 
        // ... some methods to query _repository 
    } 
    
  3. クライアントプロジェクト(そのWPFで書かれた):そのコンストラクタはIUnitOfWorkインタフェースパラメータを取ります。

したがって、サービスへのインターフェイス実装をパスするためにUnity IoCコンテナを使用します。カスタムサービスファクトリを作成する必要がある場所や、システムで使用するために登録する場所を理解できません。例えば、私はASP.NET MVCで、私が派生する必要があるDefaultControllerFactoryクラスがあることを知っています。それから私のIoCバインディングを入れ、それをGlobal.asax.csファイルに登録します。あなたは私を助けてくれますか?ありがとう。

答えて

1

DomainServiceは、DomainService.DomainServiceFactoryという静的プロパティを公開しています。

あなたは、私がコピーされ、フレドリックNormen how to wire up Unity to DomainServiceからブログ記事を貼り付けましたIDomainServiceFactory

interface IDomainServiceFactory 
{ 
    DomainService CreateDomainService(Type domainServiceType, DomainServiceContext context); 
    void ReleaseDomainService(DomainService domainService) 
} 

を実装するカスタムクラスが必要になります。あなたのGlobal.asax

protected void Application_Start(object sender, EventArgs e) 
{ 
    DomainService.Factory = new MyDomainServiceFactory(); 

    UnityContainer.RegisterType<StoreService>(); 
    UnityContainer.RegisterType<IUnitOfWork, UnitOfWorkImpl>(); 
} 
+0

public class MyDomainServiceFactory : IDomainServiceFactory { public DomainService CreateDomainService(Type domainServiceType, DomainServiceContext context) { var service = Global.UnityContainer.Resolve(domainServiceType) as DomainService; service.Initialize(context); return service; } public void ReleaseDomainService(DomainService domainService) { domainService.Dispose(); } } 

ありがとうございます!それは本当に私が必要なものです。このようなソリューションは自分で先に実装しています) – Dmitry

関連する問題