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>