汎用パラメータによるインタフェース注入
2858 ワード
public interface ITimeProvider
{
DateTime CurrentDate { get; }
}
public class TimeProvider : ITimeProvider
{
public DateTime CurrentDate { get { return DateTime.Now; } }
}
// Assembler
public class Assembler
{
static Dictionary<Type, Type> dictionary = new Dictionary<Type, Type>();
static Assembler()
{
dictionary.Add(typeof(ITimeProvider), typeof(TimeProvider));
}
public object Creat(Type type)
{
if ((type == null) || !dictionary.ContainsKey(type))
throw new NullReferenceException();
return Activator.CreateInstance(dictionary[type]);
}
//
public T Creat<T>()
{
return (T)Creat(typeof(T));
}
}
//public class Client : IobjectWithTimeProvider
//{
// public ITimeProvider TimeProvider { get; set; }
//}
// Client
class Client<T> : ITimeProvider where T : ITimeProvider
{
public T Provider { get; set; }
public DateTime CurrentDate
{
get { return Provider.CurrentDate; }
}
}
テスト
/// <summary>
/// ClientTest ,
/// ClientTest
///</summary>
[TestClass()]
public class ClientTest
{
[TestMethod()]
public void CurrentDateTest()
{
var client = new Client<ITimeProvider>()
{
Provider = (new Assembler()).Creat<ITimeProvider>()
};
}
}