我试图理解依赖注入器,当我注入的接口只有方法时,这在我看来很有意义。但是,当我有需要指定特定值的字段时该怎么办?
我知道在创建该类的实例之后,可以像下面所做的那样分配值,但这是正确的方法吗?
interface IItem
{
double Price { get; set; }
string Name { get; set; }
double Calories { get; set; }
double Fats { get; set; }
double Proteins { get; set; }
double Sugars { get; set; }
double Salt { get; set; }
}
class Item : IItem
{
public double Price { get; set; }
public double Calories { get; set; }
public double Fats { get; set; }
public double Proteins { get; set; }
public double Sugars { get; set; }
public double Salt { get; set; }
public string Name { get; set; }
}
class SomeClass
{
public IItem _item;
public SomeClass(ILabel label)
{
this._item = label;
}
public double SomeOperation()
{
return _item.Calories + _item.Fats + _item.Proteins; //just an example
}
}
void main()
{
IUnityContainer container = new UnityContainer();
container.RegisterType<IItem, Item>();
SomeClass example = container.Resolve<SomeClass>();
//what I know I can do but I don't think it's the right way
example._item.Price = 100.0;
example._item.Salt = 4;
//you get it, how can I populate that the right way? and what if I have an array of "SomeClass" do I need to do that with every instance?
}
我希望知道如何以正确的方式填充类。谢谢
答案 0 :(得分:2)
依赖注入(DI)是将功能注入其他类型。
一个简单的例子是注入记录器。
class SomeClass
{
public ILogger _logger;
public SomeClass(ILogger logger)
{
this._logger = logger;
}
public double SomeOperation(IItem item)
{
_logger.Log("SomeOperation");
return item.Calories + item.Fats + item.Proteins;
}
}
答案 1 :(得分:0)
如果要指定属性的值,则可以使用该属性(默认值):
class ItemWithSalt : IItem
{
public double Price { get; set; } = 100.0;
public double Calories { get; set; }
public double Fats { get; set; }
public double Proteins { get; set; }
public double Sugars { get; set; }
public double Salt { get; set; } = 4.0;
public string Name { get; set; }
}
,但是放下二传手并创建类似这样的项目会更有意义:
interface IItem
{
double Price { get; }
string Name { get; }
double Calories { get; }
double Fats { get; }
double Proteins { get; }
double Sugars { get; }
double Salt { get; }
}
class SaltyItem: IItem
{
public double Price => 100.00
public double Salt => 4.0
public string Name => "Salty";
}
class FattyItem: IItem
{
public double Price => 100.00
public double Fats => 4.0
public string Name => "Fatty";
}