Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net控制台应用程序-如果存在多个服务,请调用特定服务_C#_Asp.net - Fatal编程技术网

C# .Net控制台应用程序-如果存在多个服务,请调用特定服务

C# .Net控制台应用程序-如果存在多个服务,请调用特定服务,c#,asp.net,C#,Asp.net,我创建了一个.Net控制台应用程序,用于用户管理,包括创建用户、重置用户密码和编辑用户角色。因此,我的应用程序在UserCreationService中有三种不同的方法。我想知道我是否可以随时从命令行调用特定的方法?例如,我想创建用户,我只是在命令行中键入:donet run{connectionString}{username}{password}{rolename},但有时我可能想更改用户角色,我会键入dotnet run{connectionString}{username}{rolena

我创建了一个.Net控制台应用程序,用于用户管理,包括创建用户、重置用户密码和编辑用户角色。因此,我的应用程序在
UserCreationService
中有三种不同的方法。我想知道我是否可以随时从命令行调用特定的方法?例如,我想创建用户,我只是在命令行中键入:
donet run{connectionString}{username}{password}{rolename}
,但有时我可能想更改用户角色,我会键入
dotnet run{connectionString}{username}{rolename}{newRoleName}
。那么,有可能实施这一系统吗

到目前为止,我在Program.cs中的代码:

class Program
  {
    static void Main(string[] args)
    {
      string connectionString = null;
      string username = null;
      string password = null;
      string roleName = null;
      string newRoleName = null;

      try
      {
        if (args.Length < 3)
        {
          Console.WriteLine("This app requires at least 3 arguments");
          Environment.Exit(0);
        }
        else
        {
          connectionString = args[0];
          username = args[1];
          password = args[2];
          roleName = args[3];
          newRoleName = args[4];
        }

        var services = new ServiceCollection();

        //setup our DI
        // Add framework services.            
        services.AddDbContext<ApplicationDbContext>(options =>
        {
          options.UseSqlServer(connectionString);
        });

        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();

        services.AddScoped<IUserCreationService, UserCreationService>();

        // Build the IoC from the service collection
        var provider = services.BuildServiceProvider();

        var userService = provider.GetService<IUserCreationService>();

        // Create User
        userService.CreateUser(username, password, roleName).GetAwaiter().GetResult();

        // Chang user role
        userService.EditRole(username, roleName, newRoleName).GetAwaiter().GetResult();

        // Reset user password
        userService.ResetPassword(username, password).GetAwaiter().GetResult();

        Console.ReadKey();
      }
      catch (Exception e)
      {
        System.Console.WriteLine("EXCEPTION: " + e.Message);
        System.Console.WriteLine(e.StackTrace);
        if (e.InnerException != null)
        {
          System.Console.WriteLine("INNER EXCEPTION: " + e.InnerException.Message);
          System.Console.WriteLine(e.InnerException.StackTrace);
        }
      }

      System.Console.WriteLine();
      Environment.Exit(1);
    }
  }
类程序
{
静态void Main(字符串[]参数)
{
字符串连接字符串=null;
字符串username=null;
字符串密码=null;
字符串roleName=null;
字符串newRoleName=null;
尝试
{
如果(参数长度<3)
{
Console.WriteLine(“此应用程序至少需要3个参数”);
环境。退出(0);
}
其他的
{
connectionString=args[0];
用户名=args[1];
密码=args[2];
roleName=args[3];
newRoleName=args[4];
}
var services=newservicecolection();
//设置我们的DI
//添加框架服务。
services.AddDbContext(选项=>
{
使用SQLServer(connectionString);
});
服务.额外性()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.addScope();
//从服务集合构建IoC
var provider=services.BuildServiceProvider();
var userService=provider.GetService();
//创建用户
userService.CreateUser(用户名、密码、角色名).GetAwaiter().GetResult();
//更改用户角色
userService.EditRole(用户名,roleName,newRoleName).GetAwaiter().GetResult();
//重置用户密码
userService.ResetPassword(用户名、密码).GetAwaiter().GetResult();
Console.ReadKey();
}
捕获(例外e)
{
System.Console.WriteLine(“异常:+e.Message”);
系统控制台写入线(如StackTrace);
如果(例如,InnerException!=null)
{
System.Console.WriteLine(“内部异常:+e.InnerException.Message”);
System.Console.WriteLine(e.InnerException.StackTrace);
}
}
System.Console.WriteLine();
环境。出口(1);
}
}

您能要求用户在这两种情况下都输入密码吗?这样,您只需检查args[4]是否包含任何内容。如果是,请编辑用户。否则,创建一个新用户

您应该研究命令行参数解析器库,它可以很容易地指定值代表的数据段。@mason您能给我提供一些参考吗?为什么不尝试通过web搜索来查找库?谢谢,这可能是一种很不方便的方法,但我的应用程序可能会发展起来,需要更多的服务,我必须找到一个可靠的方法。