我正在嘗試使用Dependency
屬性和使用RegisterInstance
。我讀過如果我使用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 !");
}
}
塞巴斯蒂安,你是絕對正確的。我贊同你。但這只是一個例子,儘可能簡單。在我的真實應用程序中,我遵循您列出的良好做法我編輯我的帖子給出更清晰的例子。 – user278618 2012-02-17 10:43:29
@ user278618我更新了我的回答 – 2012-02-17 11:18:08
太棒了,它工作:)但你的鏈接更好。 – user278618 2012-02-17 12:00:49