RegisterInstance
을 사용하여 Dependency
특성을 사용하려고합니다. 내가 읽었습니다 RegisterInstance
을 사용하는 경우 인스턴스에 BuildUp
메서드를 사용해야합니다. 불행히도 그것은 내 코드에서 작동하지 않습니다. Alarm
속성은 해결되지 않습니다. RegisterInstance
없이 코드를 사용하면 모든 것이 정상이지만 사용하려면 RegisterInstance
이 필요합니다. 내가 놓친 게 있니?BuildUp이 종속성을 해결하지 못함
편집
var container = new UnityContainer();
container.RegisterType<IAlarm, Alarm>();
ICar car = new Car();
container.RegisterInstance<ICar>(car);
var carFromContainer = container.BuildUp<ICar>(container.Resolve<ICar>());
var alarm = carFromContainer.Alarm;
public interface ICar
{
IAlarm Alarm { get; set; }
}
public class Car : ICar
{
private IAlarm _alarm;
[Dependency]
public IAlarm Alarm
{
get { return _alarm; }
set { _alarm = value; }
}
}
public interface IAlarm
{
void Launch();
}
public class Alarm : IAlarm
{
public void Launch()
{
Console.WriteLine("Alarm !");
}
}
오래 된 예입니다
var container = new UnityContainer();
container.RegisterType<IAlarm, Alarm>();
ICar car = new Car();
container.RegisterInstance<ICar>(car);
//container.RegisterType<ICar, Car>();
var client = new Client(container);
var alarm = client.Car.Alarm;
client.Car.Alarm.Launch();
public class Client
{
public ICar Car { get; set; }
public Client(UnityContainer container)
{
//Car = container.Resolve<ICar>();
Car = container.BuildUp<ICar>(container.Resolve<ICar>());
}
}
public interface ICar
{
IAlarm Alarm { get; set; }
}
public class Car : ICar
{
private IAlarm _alarm;
[Dependency]
public IAlarm Alarm
{
get { return _alarm; }
set { _alarm = value; }
}
}
public interface IAlarm
{
void Launch();
}
public class Alarm : IAlarm
{
public void Launch()
{
Console.WriteLine("Alarm !");
}
}
세바스찬, 너는 옳다. 나는 너에게 동의한다. 그러나 이것은 가능한 한 쉬운 예일뿐입니다. 제 실제 응용 프로그램에서 여러분이 열거 한 우수 사례를 따릅니다. 나는 clearier 예를 제공하기 위해 내 게시물을 편집했습니다. – user278618
@ user278618 내 대답은 –
으로 업데이트되었습니다. 작동하지만 :) 귀하의 링크가 더 좋습니다. – user278618