구조 주입
3607 단어 부어 넣다
직접 보기.
public interface ITimeProvider
{
DateTime CurrentDate { get; }
}
public class TimeProvider : ITimeProvider
{
public DateTime CurrentDate { get { return DateTime.Now; } }
}
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
{
ITimeProvider timeProvider;
public Client(ITimeProvider timeProvider)
{
this.timeProvider = timeProvider;
}
}
그러면 클라이언트 호출 시
[TestMethod()]
public void ClientConstructorTest()
{
ITimeProvider timeProvider = (new Assembler()).Creat<ITimeProvider>();
Assert.IsNotNull(timeProvider);
Client target = new Client(timeProvider);
}
이렇게 하면 Assembler에 의존하여 클라이언트 호출에 도달할 때 구체적인 유형을 알 필요가 없다