異なるクライアントで 1 つのインターフェイスの異なる実装を使用する方法を考えています。これが状況の例です。
public interface IRandomIntGenerator
{
int Generate();
}
public class SimpleRandomIntGenerator : IRandomIntGenerator
{
public int Generate()
{
return new Random().Next();
}
}
public class CryptoServiceProviderRandomIntGenerator : IRandomIntGenerator
{
public int Generate()
{
var generator = new RNGCryptoServiceProvider();
byte[] bytes = new byte[4];
generator.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}
}
次に、特定の実装について知りたくない2人のクライアントがいます。1 つはログイン コードを生成し、もう 1 つは配列のランダムな項目を選択します。
public class LogInCodeGenerator
{
private readonly IRandomIntGenerator randomIntGenerator;
public LogInCodeGenerator(IRandomIntGenerator randomIntGenerator)
{
this.randomIntGenerator = randomIntGenerator;
}
public string GenerateCode(int length)
{
var builder = new StringBuilder(length);
for (int i = 0; i < length; i++)
builder.Append(randomIntGenerator.Generate() % 10);
return builder.ToString();
}
}
public class RandomArrayItemChoose
{
private readonly IRandomIntGenerator randomIntGenerator;
public RandomArrayItemChoose(IRandomIntGenerator randomIntGenerator)
{
this.randomIntGenerator = randomIntGenerator;
}
public string Choose(string[] arr)
{
return arr[randomIntGenerator.Generate() % arr.Length];
}
}
SimpleRandomIntGenerator
forRandomArrayItemChoose
とCryptoServiceProviderRandomIntGenerator
for を使用するように IoC コンテナーを構成したいと考えていますLogInCodeGenerator
。
.NET の一般的な IoC コンテナーでこれを行う方法はありますか? 特にウィンザー城に興味があります。