Ich versuche, E-Mail-Client in meiner asp.net Kern-Webanwendung zu erstellen.Ich habe eine Klasse mit einigen DB-Dienst als erstellt abhängig und ich habe eine Methode innerhalb dieser Klasse, die eine Verbindung zur Mailbox herstellt und sie in einem separaten Thread abgehört. Aber ich kann keine Instanz der Klasse aus der Datei startup.cs erstellen, weil ich IDBxxxxService nicht übergeben kann der Konstruktor.Wie erstelle ich eine Instanz der Klasse mit abhängigen im Konstruktor von 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",
});
und hier ist Erweiterungsmethode i geschrieben haben die Instanz mithilfe von Reflektion zu erstellen.
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;
}
registrieren alle anderen Abhängigkeiten mit dem Service-Sammlung. Wenn Sie nach Ihrem Service fragen, wird der Container alles enthalten, was Sie benötigen, um das Objektdiagramm zu hydratisieren. – Nkosi