首页 > 解决方案 > 通过构造函数的依赖注入只创建一个实例

问题描述

我想问一下如何通过构造函数创建正确的依赖注入来创建唯一对象列表。现在我遇到了这种情况:1)我将一个对象添加到我的对象列表中,但是随后的每个对象都会覆盖所有先前的对象(即它不是唯一的)。2)我静态引用工厂类。但是在这种情况下,我不在此接口的构造函数中使用依赖注入。

有没有其他可能的解决方案。

感谢所有的答案。

示例它不是 100% 相同的代码(因为我的列表也由构造函数初始化):

 class GetUserFirstOption
        {
            IUser _user;
            GetUserFirstOption(IUser user)
            {
                _user = user;
            }

            public void UsersInCompany()
            {
                //Here is connection to the database where i upload 500 records to UsersFromDataBase

                List<User> UsersInCompany = new List<User>();
                foreach (var userDB in UsersFromDataBase)
                {
                    _user.Name = userDB.Name;
                    _user.SecondName = userDB.SecondName;
                    //...

                    UsersInCompany.Add(_user);
                    //Here i have 500 users but all same

                }
            }
        }



      class GetUserSecondOption
        {
            public void UsersInCompany()
            {
                List<User> UsersInCompany = new List<User>();
                foreach (var userDB in UsersFromDataBase)
                {
                    _user = Factory.CreateNewUser();
                    _user.Name = userDB.Name;
                    _user.SecondName = userDB.SecondName;
                    //...

                    UsersInCompany.Add(_user);
                    //I have 500 unique records but i do not need to it dependency injection

                }
            }
        }



class Factory
{
   public static IGetUserSecondOption CreateUserInCompany()
   {
      return new GetUserSecondOption(UserFactory.CreateNewUser());
   }
}

class UserFactory
{
  public static IUser CreateNewUser()
  {
      return new User();
  }
}


class Program
{
  public static Main(string []args)
  {            
    IGetUserSecondOption Get = Factory.Factory.CreateUserInCompany();
    Get.UserInCompany();
   }        
}

标签: c#dependency-injection

解决方案


与其将用户注入到您的循环中,不如创建一个创建用户的工厂。然后你可以注入工厂

class GetUserSecondOption
{
    public GetUserSecondOption(UserFactory factory) { this.Factory = factory; }
    public void UsersInCompany()
    {
        List<User> UsersInCompany = new List<User>();
        foreach (var userDB in UsersFromDataBase)
        {
            var user = this.Factory.CreateNewUser();
            user.Name = userDB.Name;
            user.SecondName = userDB.SecondName;
            //...

            UsersInCompany.Add(user);    
        }
    }
}

推荐阅读