How to inject DbContext in a custom localization provider in ASP.NET Core? -


as explained in asp.net core docs can configure custom provider request localization. stated in docs:

suppose want let customers store language , culture in databases. write provider these values user.

for following code snippet provided in docs , in github sample localization.starterweb:

services.configure<requestlocalizationoptions>(options => { var supportedcultures = new[] {     new cultureinfo("en-us"),     new cultureinfo("fr") };  options.defaultrequestculture = new requestculture(culture: "en-us", uiculture: "en-us"); options.supportedcultures = supportedcultures; options.supporteduicultures = supportedcultures;  options.requestcultureproviders.insert(0, new customrequestcultureprovider(async context => {    // custom request culture logic    // dbcontext needed here <--   return new providercultureresult("en"); }));}); 

can explain me how inject dbcontext load user specific language db in above function?

well, can't inject via constructor because need instantiate during configureservices method , container isn't available @ point.

instead can resolve via httpcontext.

public class customrequestcultureprovider : requestcultureprovider {     // note don't inject dependencies it, can safely      // instantiate in configureservices method     public customrequestcultureprovider() { }       public override task<providercultureresult> determineprovidercultureresult(httpcontext httpcontext)     {         var dbcontext = httpcontext.requestservices             .getservice<appdbcontext>();     } } 

be aware though may less optimal, you'll have calls database on every request, maybe it's worth abstract further , use caching strategy depending on want dbcontext.

usually 1 should avoid database calls in culture providers, filters etc. performance reasons

update:

there generic version of getservice<t>, need import namespace via using microsoft.extensions.dependencyinjection;.


Comments

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -