C# .Net控制台应用程序-如果存在多个服务,请调用特定服务
我创建了一个.Net控制台应用程序,用于用户管理,包括创建用户、重置用户密码和编辑用户角色。因此,我的应用程序在C# .Net控制台应用程序-如果存在多个服务,请调用特定服务,c#,asp.net,C#,Asp.net,我创建了一个.Net控制台应用程序,用于用户管理,包括创建用户、重置用户密码和编辑用户角色。因此,我的应用程序在UserCreationService中有三种不同的方法。我想知道我是否可以随时从命令行调用特定的方法?例如,我想创建用户,我只是在命令行中键入:donet run{connectionString}{username}{password}{rolename},但有时我可能想更改用户角色,我会键入dotnet run{connectionString}{username}{rolena
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搜索来查找库?谢谢,这可能是一种很不方便的方法,但我的应用程序可能会发展起来,需要更多的服务,我必须找到一个可靠的方法。