c# - How create a instance of class with dependent in constructor from startup.cs(ASP.NET Core) -


i'm trying create email client in asp.net core web application.i have created class db service dependent , have method inside class connect mail box , starts listening on separate thread.but i'm unable create instance of class startup.cs file because unable pass idbxxxxservice constructor.

  var serviceprovider = services.buildserviceprovider();         serviceprovider.createinstance<mailevents>().mailsubscribe(new imapconnection         {             host = "imap.gmail.com",             enableoauth = false,             port = 993,             enablessl = true,             username = "xxxxxxxxxxx",             password = "9xxxxxxxxxxxxxx",         }); 

and here extension method have written create instance using reflection.

public static tresult createinstance<tresult>(this iserviceprovider provider) 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) tresult;         }          return null;     } 

let's assume class looks like

public class mailevents {     public mailevents(idbxxxservice db) {         //...     } } 

register other dependencies service collection in composition root.

services.addsingleton<idbxxxservice, dbxxxservice>(); //choose appropriate lifetime services.addsingleton<mailevents>(); 

that way when asking service service provider have needs hydrate object graph.

var serviceprovider = services.buildserviceprovider(); serviceprovider.getservice<mailevents>().mailsubscribe(new imapconnection {     host = "imap.gmail.com",     enableoauth = false,     port = 993,     enablessl = true,     username = "xxxxxxxxxxx",     password = "9xxxxxxxxxxxxxx", }); 

you can use 1 of overloaded methods well

//if need manually create dependency have option //in case needed add other customizations. services.addsingleton<idbxxxservice>(provider => new  dbxxxservice()); //choose appropriate lifetime 

Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -