在啟動類中,我們添加了:
services.AddTransient<ITasksService, TasksService>(provider => MultiTenentDB<TeamService>(provider));
private T MultiTenentDB<T>(IServiceProvider provider)
{
IServiceScope scope = provider.CreateScope();
AppTenant appTenent = scope.ServiceProvider.GetService<AppTenant>();
if (appTenent == null)
throw new InvalidOperationException("Organization id required");
string connectionString = string.Format(appTenent.MongoDbServer.ConnectionString);
MongoClient mongoClient = new MongoClient(connectionString);
string database = "";
if (_env.IsProduction())
{
database = appTenent.MongoDbServer.DatabaseProd;
}
else
{
database = appTenent.MongoDbServer.Database;
}
return (T)Activator.CreateInstance(typeof(T), new object[] { mongoClient, database });
}
在任務服務中:
public class TasksService : ITaskService
{
public readonly ISendEmailService _SendemailService;
public readonly IEmailBodyService _emailBodyService;
private IMongoCollection<TasksModel> _task;
public TasksService(IMongoClient client, string database)
{
_database = client.GetDatabase(database);
_task = _database.GetCollection<TasksModel>("Tasks");
}
public TasksService( ISendEmailService SendemailService, IEmailBodyService emailBodyService)
{
_SendemailService = SendemailService;
_emailBodyService = emailBodyService;
}
}
TasksService(ISendEmailService SendemailService, IEmailBodyService emailBodyService)
由于啟動類中的瞬態超載而未觸發。如何解雇建構式或任何其他解決方案?
uj5u.com熱心網友回復:
而不是使用Activator.CreateInstance,你應該使用ActivatorUtilities.CreateInstance,它允許你從提供者注入服務。
這樣,您可以擁有一個建構式:
public TasksService( ISendEmailService SendemailService, IEmailBodyService emailBodyService, IMongoClient client, string database)
{
_SendemailService = SendemailService;
_emailBodyService = emailBodyService;
_database = client.GetDatabase(database);
_task = _database.GetCollection<TasksModel>("Tasks");
}
然后在MultiTenentDB<T>:
return ActivatorUtilities.CreateInstance<T>(provider, mongoClient, database);
ActivatorUtilities.CreateInstance將呼叫適當的建構式,帶有服務ISendEmailService并IEmailBodyService從服務提供者注入,而IMongoClient client和string database是呼叫的引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/414088.html
標籤:
