如何解决依赖注入容器-如何获取对象的特定实例?
例如,我有一个Repository类,用于从数据库中获取数据,并且有几个服务类,例如Service1,Service2,Service3。
例如,对于两个或三个数据库,我将有多个存储库实例。并且,您应该能够配置服务以使用特定的数据库。
我不知道如何使用“依赖注入”容器来实现这些依赖。
据我了解,我可以将存储库服务注册为Singleton,否则将为每个依赖项创建一个新实例。
但是,我只需要两个存储库,即存储库(“ DB1”)和存储库(“ DB2”),并且在创建服务实例时,我应该能够选择要使用的数据库。也就是说,作为选项-Service1(存储库(“ DB1”)),Service2(存储库(“ DB1”)),Service1(存储库(“ DB2”))。
例如:
public class Program
{
static void Main()
{
var connectionStringDb1 = "DB1 connection string";
var connectionStringDb2 = "DB2 connection string";
var repositoryDb1 = new Repository(connectionStringDb1);
var repositoryDb2 = new Repository(connectionStringDb2);
var smsSendService1 = new SmsSendService(repositoryDb1);
var smsSendService2 = new SmsSendService(repositoryDb2);
var emailSendService1 = new EmailSendService(repositoryDb1);
smsSendService1.Run();
var tasks = new Task[]
{
smsSendService1.Run(),smsSendService2.Run(),emailSendService1.Run()
};
Task.WaitAll(tasks);
}
}
public class Repository
{
private string _connectionString;
public Repository(string connectionString)
{
_connectionString = connectionString;
}
public object GetData()
{
// Getting data from the Database
var data = ...;
return data;
}
}
public class SmsSendService
{
private readonly Repository _repository;
public SmsSendService(Repository repository)
{
_repository = repository;
}
public Task Run()
{
return Task.Run(() =>
{
// Sending SMS in a loop
while (true)
{
var data = _repository.GetData();
// ...
Task.Delay(1000);
}
});
}
}
public class EmailSendService
{
private readonly Repository _repository;
public EmailSendService(Repository repository)
{
_repository = repository;
}
public Task Run()
{
return Task.Run(() =>
{
// Sending Email in a loop
while (true)
{
var data = _repository.GetData();
// ...
Task.Delay(1000);
}
});
}
}
解决方法
尝试看看autofac命名实例
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。