1

IBookRepositoryインターフェイスがあり、SybaseAsaBookRepositoryとXMLBookRepositoryによって実装されているとします。

SybaseAsaBookRepositoryコンストラクターには2つのパラメーター、データベースのユーザーIDとパスワードが必要です。どちらの値もIBookAppConfigurationインスタンスによって取得できます。XMLBookRepositoryコンストラクターにはパラメーターは必要ありません。

どうやらIBookAppConfigurationは、Microsoft Unityが再販できるように簡単に構成できますが、シングルトンだと仮定しましょう。

では、必要な2つのコンストラクターパラメーターを適切に提供して、IBookRepositoryインターフェイスをSybaseAsaBookRepositoryに解決するようにMicrosoft Unityを構成するにはどうすればよいですか?

サンプルコードは以下のとおりです。

public interface IBookRepository
{
    /// <summary>
    /// Open data source from Sybase ASA .db file, or an .XML file
    /// </summary>
    /// <param name="fileName">Full path of Sybase ASA .db file or .xml file</param>
    void OpenDataSource(string fileName);

    string[] GetAllBookNames(); // just return all book names in an array
}

public interface IBookAppConfiguration
{
    string GetUserID();   // assuming these values can only be determined 
    string GetPassword(); // during runtime
}

public class SybaseAsaBookRepository : IBookRepository
{
    public DatabaseAccess(string userID, string userPassword)
    {
        //...
    }
}

<register type="IBookAppConfiguration" mapTo="BookAppConfigurationImplementation">
    <lifetime type="singleton"/>
</register>

<register name="SybaseAsa" type="IBookRepository" mapTo="SybaseAsaBookRepository"> 
    <constructor> 
        <param name="userID" value="??? what shall i put it here???"/> 
        <param name="userPassword" value="??? what shall i put it here???"/> 
    </constructor> 
</register>
4

1 に答える 1

0

SybaseAsaBookRepositoryのパラメータリストを変更して、IBookAppConfigurationのインスタンスを受け入れることができます。

public class SybaseAsaBookRepository : IBookRepository
{
    public SybaseAsaBookRepository(IBookAppConfiguration configuration)
    {
        string userID = configuration.GetUserID();
        string userPassword = configuration.GetPassword();
        ...
    }
}

登録は次のとおりである必要があります。

<register name="SybaseAsa" type="IBookRepository" mapTo="SybaseAsaBookRepository" /> 

Unityが知っているので、これを使用できます

于 2011-11-03T14:22:34.740 に答える