RegisterInstance
を使用してDependency
属性を使用しようとしています。私はRegisterInstance
を使用する場合は、インスタンス上でBuildUp
メソッドを使用する必要があります。残念ながら、私のコードでは動作しません。 Alarm
プロパティは解決されません。 RegisterInstance
を使わずにコードを使用すると、すべては問題ありませんが、RegisterInstance
が必要です。私は何かが恋しいですか?BuildUpで依存関係が解決されない
EDIT
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
@ user278618私は自分の答えを –
に更新しました。 – user278618