Giter Site home page Giter Site logo

homely.aspnetcore.hosting.coreapp's Introduction

Homely - ASP.NET Core MVC Helpers

Homely - ASP.NET Core 'Hosting' core application-library.

This application-library contains an opinioned program.cs class which is to reduce the ceremony for creating ASP.NET Core "Web Hosting" applications.

Basically, we (at Homely) use the same program.cs code for litterally all of our microservices. So instead of just copying/pasting this code or having this same code in our Template, we've provided this code as a NuGet package so it's easy to update all-or-any microservice if we decide to change something (e.g. we decide to change to a different logging framework).

NOTE: This is a netcoreapp application and not a netstandard library. So it can only be referenced in another netcoreapp .NET Core Application.

Build status


Why use this? What's wrong with the default standard program.cs?

We're just extending the default program.cs content that comes out of the box by:

  • Wrapping the default code inside Serilog error handling. So if any error occurs at any stage of the program (most importantly, at the EARLY starting/initialization stages, Serilog will nicely handle this.
  • Logging some important*** information about the web api: assembly date, version and when this program first started.

That's it :)

Reducing boilerplate code.

*** We (at Homely) thinks this is important!


How to use this library

  1. install-package Homely.AspNetCore.Hosting.CoreApp.Program.Main into your ASP.NET Core application.
  2. Reference the Main<T> method. You can optionally provide some customization ... if you feel like it.

Simple quickstart

public static Task Main(string[] args)
{
    return Homely.AspNetCore.Hosting.CoreApp.Program.Main<Startup>(args);
}

NOTE: the Startup class should be your Startup.cs class.

More customized startup

public static Task Main(string[] args)
{
    var options = new MainOptions
    {
        CommandLineArguments = args,
        FirstLoggingInformationMessage = "~~ Accounts Web Api ~~",
        LogAssemblyInformation = true,
        LastLoggingInformationMessage = "-- Accounts Web Api has ended/terminated --",
        EnvironmentVariableKey = "ASPNETCORE_ENVIRONMENT"
    };

    return Homely.AspNetCore.Hosting.CoreApp.Program.Main<Startup>(options);
}

Contributing

Discussions and pull requests are encouraged :) Please ask all general questions in this repo or pick a specialized repo for specific, targetted issues. We also have a contributing document which goes into detail about how to do this.

Code of Conduct

Yep, we also have a code of conduct which applies to all repositories in the (GitHub) Homely organisation.

Feedback

Yep, refer to the contributing page about how best to give feedback - either good or needs-improvement :)


homely.aspnetcore.hosting.coreapp's People

Contributors

purekrome avatar rpm1984 avatar

Stargazers

Andrejs Agejevs avatar Andrii Chumak avatar Giorgi Chakhidze avatar Tuong Nguyen avatar Nicholas Blumhardt avatar

Watchers

Nicholas Blumhardt avatar James Cloos avatar  avatar

Forkers

purekrome rpm1984

homely.aspnetcore.hosting.coreapp's Issues

Current implementation doesn't play nice with ASP.NET Core Integration tests

The way the current ASP.NET Core Integration tests work is it hooks into the referenced Startup host file, in order to leverage the web host builder.

But due to this current implementation, it's hidden and not available to the main Program.cs.

Resulting in an error like this:

Message: System.InvalidOperationException : No method 'public static IWebHostBuilder CreateWebHostBuilder(string[] args)' found on 'xyz.Program'. Alternatively, WebApplicationFactory`1 can be extended and 'protected virtual IWebHostBuilder CreateWebHostBuilder()' can be overridden to provide your own IWebHostBuilder instance.

Since Program.cs needs to be static, that means we can't leverage any inheritance etc. So might not be able to use this helper lib, if tests are needed (which is all the time, i'd hope). ๐Ÿ˜ข

Add Data-Seeding into program starting by using Generic Host with .NET Core 3.0.

Currently, data-seeding kicks off in during the Configure/ConfigureServices methods in startup.cs which means the web host has started and could be accepting connections before the DB has been seeded.

So instead update to .NET Core 3.0 and use GenericHost.

Explained here: dotnet/aspnetcore#10137 (comment)
Sample project here: https://github.com/PureKrome/AspNetCore3-P5-DataSeeding-Experiment/blob/master/Program.cs#L24

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.