KickStart.MongoDB 9.3.0

dotnet add package KickStart.MongoDB --version 9.3.0                
NuGet\Install-Package KickStart.MongoDB -Version 9.3.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="KickStart.MongoDB" Version="9.3.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add KickStart.MongoDB --version 9.3.0                
#r "nuget: KickStart.MongoDB, 9.3.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install KickStart.MongoDB as a Cake Addin
#addin nuget:?package=KickStart.MongoDB&version=9.3.0

// Install KickStart.MongoDB as a Cake Tool
#tool nuget:?package=KickStart.MongoDB&version=9.3.0                

KickStart

Application start-up helper to initialize things like an IoC container, register mapping information or run a task.

Build status

Coverage Status

Package Version
KickStart KickStart
KickStart.Autofac KickStart.Autofac
KickStart.AutoMapper KickStart.AutoMapper
KickStart.DependencyInjection KickStart.DependencyInjection
KickStart.MongoDB KickStart.MongoDB
KickStart.Ninject KickStart.Ninject
KickStart.SimpleInjector KickStart.SimpleInjector
KickStart.Unity KickStart.Unity

Download

The KickStart library is available on nuget.org via package name KickStart.

To install KickStart, run the following command in the Package Manager Console

PM> Install-Package KickStart

More information about NuGet package available at https://nuget.org/packages/KickStart

Development Builds

Development builds are available on the feedz.io feed. A development build is promoted to the main NuGet feed when it's determined to be stable.

In your Package Manager settings add the following package source for development builds: https://f.feedz.io/loresoft/open/nuget/index.json

Features

  • Run tasks on application start-up
  • Extension model to add library specific start up tasks
  • Common IoC container adaptor based on IServiceProvider
  • Singleton instance of an application level IoC container Kick.ServiceProvider

Example

This example will scan the assembly containing UserModule. Then it will find all Autofac modules and register them with Autofac. Then, all AutoMapper profiles will be registered with Automapper. Finally, it will find all classes that implement IStartupTask and run it.

Kick.Start(config => config
    .IncludeAssemblyFor<UserModule>()
    .UseAutofac()
    .UseAutoMapper()
    .UseStartupTask()
);

Pass data to the startup modules

Kick.Start(config => config
    .Data("environment", "debug")
    .Data(d =>
    {
        d["key"] = 123;
        d["server"] = "master";
    })
);

Extensions

  • StartupTask - Run any class that implements IStartupTask
  • Autofac - Registers all Autofac Module classes and creates the container
  • AutoMapper - Registers all AutoMapper Profile classes
  • DependencyInjection - Register all IDependencyInjectionRegistration instances for Microsoft.Extensions.DependencyInjection
  • MongoDB - Registers all BsonClassMap classes with MongoDB serialization
  • Ninject - Registers all NinjectModule classes and creates an IKernal
  • SimpleInjector - Run all ISimpleInjectorRegistration instances allowing container registration
  • Unity - Run all IUnityRegistration instances allowing container registration

StartupTask

The StartupTask extension allows running code on application start-up. To use this extension, implement the IStartupTask interface. Use the Priority property to control the order of execution.

Basic usage

Kick.Start(config => config
    .IncludeAssemblyFor<UserModule>() // where to look for tasks
    .UseStartupTask() // include startup tasks in the Kick Start
);

Run a delegate on startup

Kick.Start(config => config
    .IncludeAssemblyFor<UserModule>()
    .UseAutofac() // init Autofac or any other IoC as container
    .UseStartupTask(c => c =>
    {
        c.Run((services, data) =>
        {
            //do work here
        });
    })
);

Autofac

The Autofac extension allows registration of types to be resolved. The extension also creates a default container and sets it to the Kick.Container singleton for access later.

Basic usage

Kick.Start(config => config
    .IncludeAssemblyFor<UserRepository>() // where to look for tasks
    .UseAutofac() // initialize Autofac
);

Use with ASP.NET MVC

Kick.Start(c => c
    .IncludeAssemblyFor<UserModule>()
    .UseAutofac(a => a
        .Initialize(b => b.RegisterControllers(typeof(MvcApplication).Assembly)) // register all controllers 
        .Container(r => DependencyResolver.SetResolver(new AutofacDependencyResolver(r))) // set asp.net resolver
    )
    .UseAutoMapper()
    .UseMongoDB()
    .UseStartupTask()
);

To install Autofac extension, run the following command in the Package Manager Console

PM> Install-Package KickStart.Autofac

DependencyInjection

The DependencyInjection extension allows using Microsoft.Extensions.DependencyInjection for depenancy injection.

Basic Usage

Kick.Start(config => config
    .LogTo(_output.WriteLine)
    .IncludeAssemblyFor<UserRepository>() // where to look
    .UseDependencyInjection() // initialize DependencyInjection
);

Integrate with asp.net core 2.0

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // this will auto register logging and run the DependencyInjection startup
        services.KickStart(c => c
            .IncludeAssemblyFor<UserRepository>() // where to look
            .Data("configuration", Configuration) // pass configuration to all startup modules
            .Data("hostProcess", "web") // used for conditional registration
            .UseStartupTask() // run startup task
        );
    }
}

To install DependencyInjection extension, run the following command in the Package Manager Console

PM> Install-Package KickStart.DependencyInjection

SimpleInjector

The SimpleInjector extension allows registration of types to be resolved by running all instances of ISimpleInjectorRegistration. The extension also creates a default container and sets it to the Kick.Container singleton for access later.

Basic usage

Kick.Start(config => config
    .IncludeAssemblyFor<UserRepository>() // where to look
    .UseSimpleInjector () // initialize SimpleInjector
);

Using SimpleInjector with ASP.NET WebAPI

Kick.Start(c => c
    .LogTo(_logger.Debug)
    .IncludeAssemblyFor<UserModule>()
    .Data("hostProcess", "web")
    .UseSimpleInjector(s => s
        .Verify(VerificationOption.VerifyOnly)
        .Initialize(container =>
        {
            container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();
            container.RegisterWebApiControllers(httpConfiguration); // register all controllers
        })
        .Container(container =>
        {
            httpConfiguration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container); // set asp.net resolver
        })
    )
    .UseStartupTask()
);

To install SimpleInjector extension, run the following command in the Package Manager Console

PM> Install-Package KickStart.SimpleInjector

Unity

The Unity extension allows registration of types to be resolved by running all instances of IUnityRegistration. The extension also creates a default container and sets it to the Kick.Container singleton for access later.

Basic usage

Kick.Start(config => config
    .IncludeAssemblyFor<UserRepository>() // where to look
    .UseUnity () // initialize Unity
);

To install Unity extension, run the following command in the Package Manager Console

PM> Install-Package KickStart.Unity

xUnit

Example of bootstraping and logging with xUnit tests.

public class StartupTaskStarterTest
{
    private readonly ITestOutputHelper _output;

    public StartupTaskStarterTest(ITestOutputHelper output)
    {
        _output = output;

        // bootstrap project
        Kick.Start(config => config
            .LogTo(_output.WriteLine)
            .Data("environment", "test") // pass data for conditional registration
            .IncludeAssemblyFor<UserRepository>()
            .UseSimpleInjector () // initialize SimpleInjector
            .UseStartupTask()
        );

    }

    [Fact]
    public void RunTest()
    {
        var userRepository = Kick.ServiceProvider.GetService<IUserRepository>();
        Assert.NotNull(userRepository);

        // more tests
    }
}

Generic Service Registration

KickStart has a generic service registration abstraction. This allows for the creation of a generic class module that registers services for dependency injection that is container agnostic.

Example module to register services

public class UserServiceModule : IServiceModule
{
    public void Register(IServiceRegistration services, IDictionary<string, object> data)
    {
        services.RegisterSingleton<IConnection, SampleConnection>();
        services.RegisterTransient<IUserService, UserService>(c => new UserService(c.GetService<IConnection>()));

        // register all types that are assignable to IService
        services.RegisterSingleton(r => r
            .Types(t => t.AssignableTo<IService>())
            .As(s => s.Self().ImplementedInterfaces())
        );

        // register all types that are assignable to IVehicle
        services.RegisterSingleton(r => r
            .Types(t => t.AssignableTo<IVehicle>())
            .As(s => s.Self().ImplementedInterfaces())
        );
    }
}

Change Log

Version 7.0

  • drop net45 and netstandard1.5 support

Version 6.0

  • add assembly scanning for generic service registration
  • [Breaking] internal change to Context. Property Assemblies changed to Types.

Version 5.0

  • update to .net core 2

Version 4.0

  • [Breaking] Removed IContainerAdaptor and changed to use IServiceProvider instead
  • [Breaking] Renamed Kick.Container to Kick.ServiceProvider
  • [Breaking] Removed logging abstractions. Logging is now a simple Action<string> delegate
  • [Breaking] changed object creation to use ServiceProvider by default
  • [Breaking] changed IStartupTask.Run to IStartupTask.RunAsync
  • changed startup tasks that run async and in parallel by Priority
  • added shared data dictionary that is passed to all startup modules
  • added delegate based startup action
  • added IServiceModule and IServiceRegistration to abstract service/container registration
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 is compatible.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
9.3.0 123 9/10/2024
9.2.0 104 6/6/2024
9.1.0 223 7/28/2023
9.0.548 474 8/20/2022
9.0.511 514 4/23/2022
9.0.484 541 1/18/2022
9.0.476 338 12/22/2021
9.0.467 395 11/10/2021
8.1.457 400 11/4/2021
8.0.0.448 443 10/17/2021
8.0.0.433 447 7/28/2021
8.0.0.426 454 7/9/2021
8.0.0.379 640 2/15/2021
8.0.0.369 463 1/19/2021
8.0.0.360 488 12/9/2020
8.0.0.345 479 11/13/2020
8.0.0.334 493 10/26/2020
8.0.0.328 565 10/17/2020
8.0.0.317 573 10/2/2020
8.0.0.310 520 9/21/2020
8.0.0.279 601 7/19/2020
8.0.0.272 618 7/6/2020
8.0.0.266 628 6/25/2020
8.0.0.265 672 6/25/2020
8.0.0.262 721 6/13/2020
8.0.0.221 1,020 4/11/2020
8.0.0.181 729 1/24/2020
8.0.0.174 659 1/7/2020
8.0.0.171 746 1/6/2020
8.0.0.162 704 12/15/2019
8.0.0.156 677 12/5/2019
8.0.0.129 667 9/26/2019
7.0.0.126 790 6/10/2019
7.0.0.125 856 4/23/2019
7.0.0.124 768 3/2/2019
6.2.0.122 1,773 6/6/2018
6.1.0.120 1,047 5/7/2018
6.0.0.116 1,109 2/6/2018
6.0.0.113 1,041 11/26/2017
6.0.0.112 1,070 10/2/2017
5.0.0.110 1,028 9/17/2017
4.1.0.106 1,054 3/12/2017
4.1.0.105 973 3/10/2017
4.1.0.104 1,018 3/9/2017
4.0.0.103 993 3/6/2017
4.0.0.101 1,014 2/27/2017
4.0.0.100 999 2/26/2017
3.0.0.88 1,036 2/21/2017
3.0.0.87 1,151 12/20/2016
3.0.0.85 1,073 10/22/2016
3.0.0.84 1,054 9/28/2016
3.0.0.80 1,104 8/15/2016
3.0.0.77 1,040 8/11/2016
3.0.0.75 1,064 8/2/2016
2.5.0.69 1,491 7/28/2016
2.5.0.64 1,200 4/19/2016
2.5.0.62 1,083 4/1/2016
2.5.0.61 1,084 3/9/2016
2.0.0.57 3,006 12/9/2015
2.0.0.56 1,190 11/12/2015
2.0.0.55 1,150 10/22/2015
2.0.0.53 1,156 8/18/2015
2.0.0.50 1,133 6/18/2015
2.0.0.44 2,971 4/9/2015
2.0.0.39 1,256 1/5/2015
2.0.0.38 1,394 12/17/2014
1.0.4 1,260 12/1/2014
1.0.3 1,271 11/25/2014
1.0.2 1,315 6/17/2014
1.0.1 1,185 6/17/2014
1.0.1-beta15 982 6/15/2014
1.0.0 1,183 6/12/2014
1.0.0-beta11 985 6/11/2014
1.0.0-alpha9 961 6/10/2014