Вариант 1:
Чтобы заставить Property Injection
работать со свойствами, обратите внимание, что _salary
- это поле , и что вам нужно настроить его как Свойство .
Кроме того, @ ehasanul-hoque answer , вы можете изменить поле _salary
, чтобы оно было приватным, и добавить публичное свойство, например (см. Этот answer для получения более подробной информации):
private ISalary _salary;
public ISalary Salary
{
get
{
return this._salary;
}
set
{
_salary = this.value;
}
}
Вариант 2:
Если вы все еще не хотите преобразовывать его в свойство, вы можете использовать Method Injection
, добавив метод SetSalary
, например:
public class Employee: IEmployee
{
private ISalary _salary;
public void SetSalary(ISalary salary)
{
this._salary = salary;
}
}
И строитель может выглядеть так:
var builder = new ContainerBuilder();
builder.RegisterType<Salary>().As<ISalary>();
builder.RegisterType<Employee>()
.OnActivated(IActivatedEventArgs<Employee> e) =>
{
var salary = e.Context.Resolve<ISalary>();
e.Instance.SetSalary(salary);
});
var container = build.Build();
Employee employee = container.Resolve<Employee>();