2012-04-24 9 views
0

私はこのようなWebサービスのファサードを持っている:ファサードで需要依存性注入を行うにはどうすればいいですか?

interface MyWebServices 
{ 
    ReportsService.Conversion[] Conversions(); 
    ExportService.Advertiser[] ExportAdvertisers(); 
} 

public class MyWebServices : IMyWebServices 
{ 
    private string apiKey; 

    public CakeWebService(string apiKey) 
    { 
     this.apiKey = apiKey; 
    } 

    public ExportService.Advertiser[] ExportAdvertisers() 
    { 
     var service = new ExportService.export(); 
     int advertiserID = 0; 
     var advertisers = service.Advertisers(this.apiKey, advertiserID); 
     return advertisers; 
    } 

    public ReportsService.Conversion[] Conversions() 
    { 
     var target = new ReportsService.reports(); 
     DateTime from = new DateTime(2012, 1, 1); 
     DateTime to = DateTime.Now.AddDays(1); 
     int affiliateID = 0; 
     int offerID = 0; 
     var conversions = target.ConversionExport(this.apiKey, from, to, affiliateID, offerID, false); 
     return conversions; 
    } 
} 

各メソッドは、Webサービスのインスタンスを作成し、呼び出す前に、それを構成します。

私はむしろ私のUnityContainerこの設定を行う必要があるだろうが、私は、私はこれを使用するために良い候補であるかもしれないと思っています...「デマンド方式注入上」のようなものを望む

を残しています傍受の延長ですが、実際にシナリオが動作するかどうかを知る方法はありません。これは合理的な方法ですか?

答えて

0

ソリューションは私には非常にシンプルに見えますが、なぜちょうどIReportServiceIExportServiceを作成してみましょうではない団結serivceに具体的な実装を注入し、このように見えるように少しあなたのクラスをリファクタリング:

public interface IExportService 
{ 
    ExportService.Advertiser[] ExportAdvertisers(); 
} 

public class ConcreteExportService : IExportService 
{ 
    public ExportService.Advertiser[] ExportAdvertisers() 
    { 
     var service = new ExportService.export(); 
     int advertiserID = 0; 
     var advertisers = service.Advertisers(this.apiKey, advertiserID); 
     return advertisers; 
    } 
} 

public interface IReportService 
{ 
    ReportsService.Conversion[] Conversions(); 
} 

public class ConcreteReportService : IReportService 
{ 
    public ReportsService.Conversion[] Conversions() 
    { 
     var target = new ReportsService.reports(); 
     DateTime from = new DateTime(2012, 1, 1); 
     DateTime to = DateTime.Now.AddDays(1); 
     int affiliateID = 0; 
     int offerID = 0; 
     var conversions = target.ConversionExport(this.apiKey, from, to, affiliateID, offerID, false); 
     return conversions; 
    } 
} 

public class MyWebServices : IMyWebServices 
{ 
    private string apiKey; 
    private IExportService _exportService; 
    private IReportService _reportService; 

    public MyWebServices(
     IExportService exportService, 
     IReportService reportService) 
    { 
     this._exportService = exportService; 
     this._reportService = reportService; 
    } 

    public ExportService.Advertiser[] ExportAdvertisers() 
    { 
     return this._exportService.ExportAdvertisers(); 
    } 

    public ReportsService.Conversion[] Conversions() 
    { 
     return this._reportService.Conversions(); 
    } 

    public CakeWebService(string apiKey) 
    { 
     this.apiKey = apiKey; 
    }  
} 
+0

+1、なぜあなたはまだ '新しいExportService'をやっているのですか?コンストラクターインジェクションの良い候補です。 –

関連する問題