예제 #1
0
        //Main is the starting point for any application
        public static void Main(string[] args)
        {
            //Creates the host and calls the starter file --> sets up all the services and runs it
            //Wants to separate the build and run so that we are able to injerect and seed our data; when the application runs, we ensure that data is there
            //Asks the host to get built and calls the startup
            var host = CreateHostBuilder(args).Build();

            //Need to ensure that catalogcontext service is up and running before seeding data
            //Scope asks for how each of the services are doing
            using (var scope = host.Services.CreateScope())
            {
                //If there are 5 services getting start up, and we are only interested in one specifc service, we can call it out via scope
                //Ask the scope, provide me the name of the service provider
                //For each services, ask for each one of the providers
                var serviceProviders = scope.ServiceProvider;

                //Out of all the service providers, we are looking for one - looking for a specific provider
                //Provider, can you tell me if the catalog context is running; i.e., can you get a reference to my context
                //Gives me the pointer to the database
                var context = serviceProviders.GetRequiredService <CatalogContext>();

                //Once it's available, we can fire the seed method, which requires the context parameter --> pointer of where the database is
                CatalogSeed.Seed(context);
            }

            //Now we have to add the run; in real production this is not needed because we will not need to seed the data
            host.Run();
        }
예제 #2
0
        public static void Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();

            // before run, build services first
            // host = startup
            var host = CreateHostBuilder(args).Build();

            // CreateScope() means how your services are coming along
            // using guarantees that object to be disposed
            using (var scope = host.Services.CreateScope())
            {
                // ask for each service providers
                var serviceproviders = scope.ServiceProvider;
                // get the one provider of providers
                // get a reference from the context
                // it will wait for this service(CatalogContext) is available then give the pointer to context
                var context = serviceproviders.GetRequiredService <CatalogContext>();

                // after get context then it is guaranteed that CatalogContext is ready
                // then we can push data into tables
                CatalogSeed.Seed(context);
            }

            host.Run();
        }
예제 #3
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            // Get service collection from the host object
            using (var scope = host.Services.CreateScope())
            {
                // Get all the services registered in the dependency injection container
                var services = scope.ServiceProvider;

                try
                {
                    // Register the catalog context
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }

            host.Run();
        }
예제 #4
0
파일: Program.cs 프로젝트: hayatmk2/Event
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                var context  = services.GetRequiredService <CatalogContext>();
                CatalogSeed.SeedAsync(context).Wait();
            }
            host.Run();
        }
예제 #5
0
        // Entry point
        public static void Main(string[] args)
        {
            // Building VM
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope()) // asking all the dependancies
            {
                var servieProviders = scope.ServiceProvider;
                var context         = servieProviders.GetRequiredService <CatalogContext>();
                CatalogSeed.Seed(context);
            }
            host.Run();
        }
예제 #6
0
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            //create scope coming from DI
            using (var scope = host.Services.CreateScope())
            {
                var serviceProviders = scope.ServiceProvider;
                var context          = serviceProviders.GetRequiredService <CatalogContext>();
                CatalogSeed.Seed(context);
            }
            host.Run();
        }
예제 #7
0
        //Notes:IIS - Internet Information service - a piece of software  in windows that hosts web application.Similar to Tomcat in Linux
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            //Here we are creating a large object so we need to let garbage colelctor know we dont need this anymore.
            //Here when we reach the end of using statement we dont want scope anymore as scope can be alarge object
            using (var scope = host.Services.CreateScope())//Wait until my Database is creted before seeding
            {
                var services = scope.ServiceProvider;
                var context  = services.GetRequiredService <CatalogContext>();//tell me if DB's created by CatalogContext  is there
                CatalogSeed.SeedAsync(context).Wait();
            }
            host.Run();
        }
예제 #8
0
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            //first ask startup file ie host the scope of services which is Add Controller and Add DbContext
            using (var scope = host.Services.CreateScope())
            //using statement guarantees that whatever is inside the curly braces of using it will be marked for deletion ie behind the scene it will call IDisposable
            {
                var serviceProviders = scope.ServiceProvider;                                  // it means give me the scope of each service provider
                var context          = serviceProviders.GetRequiredService <CatalogContext>(); // i am interested only whether sql database is set up or not so only need Catalog Context
                //This above line will act as await methos and will wait till sql is up and running.
                //Now sql is up and running so we can populate it with data
                CatalogSeed.Seed(context);// context has name of sql database
            }
            host.Run();
        }
예제 #9
0
        public static void Main(string[] args)
        {
            //Breaking up build and run to seed the data, this is only for local data, not in production
            var host = CreateHostBuilder(args).Build();

            // Add the seed dependancy injection here, before we run - Module 10
            // using here is idisposable - design pattern - how an object would be destroyed
            using (var scope = host.Services.CreateScope())
            {
                var serviceProviders = scope.ServiceProvider;
                var context          = serviceProviders.GetRequiredService <CatalogContext>();
                CatalogSeed.Seed(context);
            }
            // Guranteed that scope.Dispose (createscope has a dispose method) is called here, by calling in Using stmt, finalizer
            // not every object can be used inside the using stmt
            host.Run();
        }
예제 #10
0
        public static void Main(string[] args)
        {
            //this is my docker
            var host = BuildWebHost(args);

            //creating the scope, give me a docker image. wrapping in a user statement
            //so when the system is killed it kills the docker image
            //will call dispose when reaches end of the line
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                var context  = services.GetRequiredService <CatalogContext>();
                CatalogSeed.SeedAsync(context).Wait();
            }

            host.Run();
        }
예제 #11
0
        public static void Main(string[] args)
        {
            var host = BuildWebHost(args);

            using (var scope = host.Services.CreateScope()) // setting up docker destroy docer andclean memory if use in a using loop.
            {
                var services = scope.ServiceProvider;       //docker providing alll the provider one iscatalogcontext

                var context =

                    services.GetRequiredService <CatalogContext>();

                CatalogSeed.SeedAsync(context).Wait();
            }

            host.Run();
        }
예제 #12
0
        public static void Main(string[] args)
        {
            var host = BuildWebHost(args);

            using (var scope = host.Services.CreateScope()){
                var services = scope.ServiceProvider;
                try{
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception e) {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(e, "ERROR SEEDING");
                }
            }
            host.Run();
        }
예제 #13
0
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var context = scope.ServiceProvider.GetRequiredService <CatalogContext>();

                CatalogSeed.Seed(context);

                // TODO:
                // What is the earliest time that you can receive dependency injection
                // into a constructor of a class?
                // How soon is too soon?
            }

            host.Run();
        }
예제 #14
0
 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env, CatalogSeed seed)
 {
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }
     else
     {
         // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
         //app.UseHsts();
     }
     app.UseSwagger()
     .UseSwaggerUI(c => {
         c.SwaggerEndpoint($"/swagger/v1/swagger.json", "Product Catlog api version1 ");
     });
     //seed.SeedAsync();
     //app.UseHttpsRedirection();
     app.UseMvc();
 }
예제 #15
0
        public static void Main(string[] args)
        {
            //to call "Seed" method from CatalogSeed.cs. We don't call it from Startup.cs because
            //when the microservice and database are deployed on different Docker containers
            //the "services.AddDbContext.." command starts building the container for db.If seed
            //method is called after that line then it might fail if the container for db is not up
            //and running yet. So we call it from Program.cs to make sure containers are ready to go.

            var host = CreateHostBuilder(args).Build();

            //before running the appl, we seed the data by calling the "Seed" method:
            using (var scope = host.Services.CreateScope())
            {
                var serviceProviders = scope.ServiceProvider;
                var context          = serviceProviders.GetRequiredService <CatalogContext>(); //this line ensures db VM is built and ready to go.
                CatalogSeed.Seed(context);
            }
            host.Run();
        }
예제 #16
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger>();
                    logger.LogError("Failed to get Database context", ex);
                }
            }
            host.Run();
        }
예제 #17
0
 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {
     if (env.IsDevelopment())
     {
         app.UseDeveloperExceptionPage();
     }
     else
     {
         app.UseHsts();
     }
     using (var scope = app.ApplicationServices.CreateScope()) {
         var ctx = scope.ServiceProvider.GetService <CatalogContext> ();
         CatalogSeed.SeedAsync(ctx).Wait();
     }
     app.UseSwagger()
     .UseSwaggerUI(
         c => c.SwaggerEndpoint($"/swagger/v1/swagger.json", "ProductCatalogAPI V1")
         );
     //app.UseHttpsRedirection ();
     app.UseMvc();
 }
예제 #18
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception e)
                {
                    var logger = services.GetRequiredService <ILogger>();
                    logger.Log(LogLevel.Error, $"Exception {e.Message}: InnerException: {e.InnerException?.Message}", e.StackTrace);
                }
            }

            host.Run();
        }
예제 #19
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    //Host'u alarak service collectiona eriştik. Daha sonra buradan register olmuş olan DbContextimizi alıp seeddata methoduna gönderdik.
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occured while seeding the database");
                }
            }
            host.Run();
        }
예제 #20
0
        public static void Main(string[] args)
        {
            var host = BuildWebHost(args);

            using (var scope = host.Services.CreateScope())
            {
                //get the services collection
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occured while seeding the database");
                }
            }
            host.Run();
        }
예제 #21
0
        public static void Main(string[] args)
        {
            IWebHost host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                IServiceProvider services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    MigrateDatabase.EnsureCreated(context);
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occured while seeding the database.");
                }
            }
            host.Run();
        }
예제 #22
0
        public static void Main(string[] args)
        {
            var webHost = CreateWebHostBuilder(args).Build();

            using (var scope = webHost.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    context.Database.Migrate();
                    CatalogSeed.SeedTestData(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error occured during data seed.");
                }
            }

            webHost.Run();
        }
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            //From the scope, I will get the services
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    //Obtained an instance of catalog context
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error Occured while seeding values");
                }
            }
            host.Run();
        }
예제 #24
0
        public static void Main(string[] args)
        {
            var hostBuilder = CreateHostBuilder(args);
            var host        = hostBuilder.Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "Seeding error");
                }
            }

            host.Run();
        }
예제 #25
0
        public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    context.Database.Migrate();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    //var logger = services.GetRequiredService<ILogger>();
                    //logger.LogError(ex, "An error occured while seeding database");
                }
            }
            host.Run();
        }
예제 #26
0
        public static void Main(string[] args)
        {
            //adding of the dummy data in catalog seed
            //host is docker image
            var host = BuildWebHost(args);

            //give me a scope/instance of the docket image
            using (var scope = host.Services.CreateScope())

            {
                //get all the list of services on docker image
                var services = scope.ServiceProvider;

                //locate the catalog context out of the list of services
                var context = services.GetRequiredService <CatalogContext>();

                //add dummy data in catalog context, by calling Seed funtion
                //call the wait on this async function becuse main cannot be made to async funtion
                CatalogSeed.SeedAsync(context).Wait();
            }
            //run docker image
            host.Run();
        }
예제 #27
0
        public static void Main(string[] args)
        {
            // TODO: Refactor to evironment
            // CreateWebHostBuilder(args).Build().Run(); ---> Default

            var host = CreateWebHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                try
                {
                    var context = services.GetRequiredService <CatalogContext>();
                    CatalogSeed.SeedAsync(context).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService <ILogger <Program> >();
                    logger.LogError(ex, "An error Occured while seeding the database");
                }
            }

            host.Run();
        }
예제 #28
0
        public static void Main(string[] args)
        {
            // Create host is where docker container gets created
            var host = CreateHostBuilder(args).Build();

            //Build() returns an IHost Interface, "A program abstraction."
            // https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihost?view=dotnet-plat-ext-3.1

            // Creates a host
            // Within the host (see CreateHostBuilder() below)
            // Creates a Startup
            // Which sets up your services one-by-one
            // Then run the microservice

            // Create host is the application in which all docker containers are created
            // Right after Build() returns, you can guarantee that services are up
            // Call Seed() between then and Run()

            // host is your host machine that is actually kicking off all these VMs

            // WAIT,
            // First must check to ensure that the CatalogContext service is running
            using (var scope = host.Services.CreateScope())
            // The IHost.Services property contains "The programs configured services."

            // Services is of type IServiceProvider, whose docs page appears to be
            // missing, but here is the ServiceProviderService extension class
            // ("Extension methods for getting services from an IServiceProvider.")
            //https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceproviderserviceextensions?view=dotnet-plat-ext-3.1

            // ServiceProviderServiceExtensions.CreateScope(IServiceProvider)
            // Or,
            // IServiceProvider.CreateScope()
            //https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceproviderserviceextensions.createscope?view=dotnet-plat-ext-3.1#Microsoft_Extensions_DependencyInjection_ServiceProviderServiceExtensions_CreateScope_System_IServiceProvider_
            // "Creates/Returns an IServiceScope that can be used to resolve scoped services."
            // IServiceScope Interface
            // "The Dispose() method ends the scope lifetime. Once Dispose is called, any scoped services that have been resolved from ServiceProvider will be disposed."
            // https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicescope?view=dotnet-plat-ext-3.1


            // Ask Startup about each of the services that are being set up
            // Are they set up?
            // Scope of each service means its status in setup?
            {
                // Recall from the using statement above that since CreateScope()
                // returned an IServiceScope, var scope is of type IServiceScope

                // IServiceScope (the scope) has property ServiceProvider of type IServiceProvider:
                // "The IServiceProvider used to resolve dependencies from the scope."
                //https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.iservicescope.serviceprovider?view=dotnet-plat-ext-3.1#Microsoft_Extensions_DependencyInjection_IServiceScope_ServiceProvider

                var serviceProviders = scope.ServiceProvider;

                // In this situation, ServiceProvider will be CatalogContext
                var context = serviceProviders.GetRequiredService <CatalogContext>();
                // Of all the service providers, I'm looking for just one, the CatalogContext
                // GetRequiredService<CatalogContext>() won't return until the
                // db service is available. This is a wait scenario.

                // ServiceProviderServiceExtensions.GetRequiredService()
                // GetRequiredService<T>(IServiceProvider)
                // Or,
                // IServiceProvider.GetRequiredService<CatalogContext>();
                //https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.serviceproviderserviceextensions.getrequiredservice?view=dotnet-plat-ext-3.1#Microsoft_Extensions_DependencyInjection_ServiceProviderServiceExtensions_GetRequiredService__1_System_IServiceProvider_
                // "Returns a service object of type CatalogContext."

                // Recall the signature of CatalogSeed.Seed():
                // public static void Seed(CatalogContext context)

                // Finally seed the db with the data
                CatalogSeed.Seed(context);
            }
            // QUESTION:
            // Totally understand why it's important to check and see that the
            // CatalogContext service is running. Why is it so involed to do so?
            // What is there to clean up from getting the scope?

            // Now that data is all set up, finally run the host
            host.Run();
            // (This used to happen right after the Build() step at the top of Main())

            // Brillan's question in-class:
            // Only breaking this up: CreateHostBuilder(args).Build().Run();
            // because seeding the db with sample data? Answer: yes.
            // Unless you want to do something between your creation and your deployment
            // In real production, you may not need to break this up.


            // Now go back up to using statement:
            // using (var scope = host.Services.CreateScope()) {}
            // overloading of the term/keyword
            // guarantees that the object will be disposed at the end
            // of the block. ***ONLY*** if the object type implements IDisposable
            // Fellow student's good guess
            // Don't have to wait until G0 is running low, G1 is running low
            // Calls Dispose() on the object proactively
            // Object can be cleaned up without needing to run the finalizer


            // QUESTION
            // Why do I keep thinking of exception handling with the using
            // statement?
            // Kal says no relationship between using statement and try/catch/finally
            // Am I confuse?


            // ---
            // Now done here in Program.cs
            // Want to see this in action
            // See db get created

            // Delete any existing CatalogDb from previous runs
            // Then, note that there is no CatalogDb in LocalDb

            // First! Run Powershell Command
            // Need to AddMigrations
            // Need to inform EntityFramework of all these changes
            // No folder called Migrations in project (yet)

            // Open Powershell prompt
            // View > Other Windows > Package Manager Console (Ctrl+`)
            // (Powershell useful for managing NuGet packages)
            // Make sure you're pointing at the right project:
            // Default project: src\services\ProductCatalogApi

            // PM> Add-Migration Initial
            // (Will get warning about CatalogItem.Price column not having type specified
            // See how Migrations folder appeared in project
            // Contains instructions for EF to create tables
            // Converted your code into SQL-like (yet still C#) syntax
            // DO NOT EDIT THE AUTOGEN FILE
            // We've captured the delta.
            // This initial migration goes from nothing to all tables set up.

            // **Could** run UpdateDatabase manually
            // But already wrote the code to do that from CatalogSeed.Seed()

            // So...
            // Almost ready to build and run code.
            // Program
            // Main
            // Startup
            // CatalogSeed
            // CatalogContext.Database.Migrate() (does UpdateDatabase, which applies migrations)

            // But first!
            // Run chooses Docker because we added docker support, but not configured yet
            // Run as IIS Express instead for now (Internet Information Services)
            // IIS is a provider that opens up the port for your web applications
            // to run (on Windows)

            // (On Linux, called tomcat?)

            // We are building a microservice, even though not a web application,
            // it is still a Web API (haven't written any yet, but we will)

            // OK, RUN
            // Confirm that seed data was set


            // REMEMBER:
            // When using the SQL Server Object Explorer to view db tables
            // and data, remember to refresh the view/window to see the created db.
            // Right click on a table, View Data to see the data in the table.
        }