首页 > 解决方案 > 当有字段时我应该如何使用依赖注入,而不仅仅是方法

问题描述

我试图理解依赖注入器,当我注入的接口只有方法时,这在我看来是有意义的。但是,当我有需要具有特定值的字段时,我该怎么办?

我知道在创建类的实例后,我可以像下面那样分配值,但这是正确的方法吗?

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?

}

我希望知道如何以正确的方式填充类。谢谢

标签: c#dependency-injection

解决方案


依赖注入 (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;
    }
}

推荐阅读