2009-04-15 11 views
0

私はシンプルな機能を持っています。コーディングスタイルをIOCにどのように変換するのかを考えてみてください。この機能をIOCにどのように変更しますか?

public User GetUserByID(int userID) 
{ 
    DataProvider dp = new DataProvider(); 

    return dp.GetUserByID(userID); 
} 

私のdataproviderは簡単ですADO.net、接続を開き、sprocを呼び出してUserオブジェクトを返します。

答えて

0

メソッドでDataProviderのインスタンスを明示的に作成する代わりに、メソッドの引数として渡します。あなたのメソッドの外で、ファクトリクラスを作成してDataProviderのインスタンスを作成するか、UnityのようなIOCコンテナを使用することができます。

1

これは、あなたがのIoCを使用してそれを行うだろうか、一般的である:

public interface IDataProvider 
{ 
    User GetUserByID(int userID); 
} 

... 

class Client 
{ 
    // Client gets the IDataProvider as a mandatory constructor parameter 
    public Client (IDataProvider dataProvider) 
    { 
     this.dataProvider = dataProvider; 
    } 

    public User GetUserByID(int userID) 
    { 
     return dataProvider.GetUserById (userID); 
    } 

    private IDataProvider dataProvider; 
} 

... 

void Main() 
{ 
    // create IoC container of your choice... 
    IoCContainer container = new IoCContainer(); 
    // ... and then configure it (from a config. file or programmatically) 
    container.Configure(); 

    // create the Client instance using the container 
    // note that the container takes care of creating appropriate IDataProvider 
    // for you 
    Client client = container.GetService<Client>(); 
    User user = client.GetUserByID ("john doe"); 
} 

あなたの例との唯一の問題は、あなたのクライアントクラスのメソッドは実際にコードに任意の値を追加していないということである - それは単に転送しますデータプロバイダへの呼び出し。

+0

+1。あなたのコメントについては、それが何らかの抽象を提供するなら、それは価値があるかもしれません。それ以上の文脈なしに判断するのは難しいです。 –

関連する問題