유니티 문서 상태 :Unity의 자동 주입이 인터페이스 삽입 생성자에서 작동하도록하는 방법은 무엇입니까?
,210개발자들이 유니티 컨테이너의 해결 방법을 사용하여 을 인스턴스화하는 클래스는 이 다른 클래스, 유니티 컨테이너 에 하나 이상의 종속성을 정의하는 생성자가있는 경우 종속 객체를 자동으로 생성합니다.은 으로 지정됩니다.
이 매우 중요하지만, 분리 된 일을 유지하기 위해 가장 자주, 클래스 주입을위한하지만 인터페이스를 지정하지 마십시오.
그렇다면 유니티의 자동 주입 기능을 활용하려면 어떻게해야합니까? <>클래스 삽입 대신 인터페이스 주입을 지정하는 클래스를 작성하면 어떻게됩니까?
즉, 다음 코드에서 고객 생성자를 "공개 고객 (ILogger 로거)"으로 변경하면 어떻게 작동합니까?
using System;
using Microsoft.Practices.Unity;
namespace TestUnityInjection23
{
public class Program
{
static void Main(string[] args)
{
Customer customer1 = new Customer(new BasicLogger());
//Customer customer2 = new Customer(new AdvancedLogger()); //can't use this since Customer only accepts BasicLogger
UnityContainer container = new UnityContainer();
container.RegisterType<Customer>();
container.RegisterType<ILogger, BasicLogger>();
Customer customer3 = container.Resolve<Customer>();
Console.ReadLine();
}
}
public class Customer
{
public Customer(BasicLogger logger) //would like to have Customer depend on ILogger here so logger can be swapped out
{
logger.WriteToLog("creating the customer");
}
}
public interface ILogger
{
void WriteToLog(string text);
}
public class BasicLogger : ILogger
{
public void WriteToLog(string text)
{
Console.WriteLine(text);
}
}
public class AdvancedLogger : ILogger
{
public void WriteToLog(string text)
{
Console.WriteLine("*** {0} ***", text);
}
}
}
나는, 문제는 나는 물론 아무튼 "container.RegisterType()"를 시도했던 것을 할 경우 예 작동합니까 BasicLogger 또는 AdvancedLogger를 런타임에 주입해야하는지 지정하십시오. 나는 용기가 어떻게 사용할 것인지 결정할 것인지 궁금해했다. –