我正尝试在我的asp.net核心Web应用程序中创建电子邮件客户端。我创建了一些具有某些数据库服务的类,如依赖和我有一个方法在这个类,将连接到邮箱,并开始在一个单独的线程监听它。但我无法从startup.cs文件创建类的实例,因为我无法通过IDBxxxxService到构造函数。如何在startup.cs中创建依赖于构造函数的类的实例(ASP.NET Core)
var serviceProvider = Services.BuildServiceProvider();
serviceProvider.CreateInstance<MailEvents>().MailSubscribe(new IMAPConnection
{
Host = "imap.gmail.com",
EnableOAuth = false,
Port = 993,
EnableSSL = true,
UserName = "xxxxxxxxxxx",
Password = "9xxxxxxxxxxxxxx",
});
这里是我写的使用反射创建实例的扩展方法。
public static TResult CreateInstance<TResult>(this IServiceProvider provider) where TResult: class
{
ConstructorInfo constructor = typeof(TResult).GetConstructors()[0];
if (constructor != null)
{
object[] args = constructor
.GetParameters()
.Select(o => o.ParameterType)
.Select(o => provider.GetService(o))
.ToArray();
return Activator.CreateInstance(typeof(TResult), args) as TResult;
}
return null;
}
注册的所有其他依赖的服务集合。这样,当询问您的服务时,容器将具备保存对象图所需的全部内容。 – Nkosi