KickStart.Unity
9.2.0
See the version list below for details.
dotnet add package KickStart.Unity --version 9.2.0
NuGet\Install-Package KickStart.Unity -Version 9.2.0
<PackageReference Include="KickStart.Unity" Version="9.2.0" />
paket add KickStart.Unity --version 9.2.0
#r "nuget: KickStart.Unity, 9.2.0"
// Install KickStart.Unity as a Cake Addin #addin nuget:?package=KickStart.Unity&version=9.2.0 // Install KickStart.Unity as a Cake Tool #tool nuget:?package=KickStart.Unity&version=9.2.0
KickStart
Application start-up helper to initialize things like an IoC container, register mapping information or run a task.
Package | Version |
---|---|
KickStart | |
KickStart.Autofac | |
KickStart.AutoMapper | |
KickStart.DependencyInjection | |
KickStart.MongoDB | |
KickStart.Ninject | |
KickStart.SimpleInjector | |
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 anIKernal
- 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 useIServiceProvider
instead - [Breaking] Renamed
Kick.Container
toKick.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
toIStartupTask.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
andIServiceRegistration
to abstract service/container registration
Product | Versions 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 was computed. |
.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. |
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 | 109 | 9/10/2024 |
9.2.0 | 109 | 6/6/2024 |
9.1.0 | 197 | 7/28/2023 |
9.0.548 | 450 | 8/20/2022 |
9.0.511 | 508 | 4/23/2022 |
9.0.484 | 492 | 1/18/2022 |
9.0.476 | 327 | 12/22/2021 |
9.0.467 | 362 | 11/10/2021 |
8.1.457 | 368 | 11/4/2021 |
8.0.0.448 | 443 | 10/17/2021 |
8.0.0.433 | 419 | 7/28/2021 |
8.0.0.426 | 444 | 7/9/2021 |
8.0.0.379 | 461 | 2/15/2021 |
8.0.0.369 | 445 | 1/19/2021 |
8.0.0.360 | 450 | 12/9/2020 |
8.0.0.345 | 476 | 11/13/2020 |
8.0.0.334 | 496 | 10/26/2020 |
8.0.0.328 | 540 | 10/17/2020 |
8.0.0.317 | 512 | 10/2/2020 |
8.0.0.310 | 522 | 9/21/2020 |
8.0.0.279 | 550 | 7/19/2020 |
8.0.0.272 | 547 | 7/6/2020 |
8.0.0.266 | 514 | 6/25/2020 |
8.0.0.265 | 540 | 6/25/2020 |
8.0.0.262 | 639 | 6/13/2020 |
8.0.0.221 | 649 | 4/11/2020 |
8.0.0.181 | 649 | 1/24/2020 |
8.0.0.174 | 596 | 1/7/2020 |
8.0.0.171 | 665 | 1/6/2020 |
8.0.0.162 | 614 | 12/15/2019 |
8.0.0.156 | 620 | 12/5/2019 |
8.0.0.129 | 613 | 9/26/2019 |
7.0.0.126 | 835 | 6/10/2019 |
7.0.0.125 | 716 | 4/23/2019 |
7.0.0.124 | 704 | 3/2/2019 |
6.2.0.122 | 1,153 | 6/6/2018 |
6.1.0.120 | 1,032 | 5/7/2018 |
6.0.0.116 | 1,135 | 2/6/2018 |
6.0.0.113 | 1,187 | 11/26/2017 |
6.0.0.112 | 984 | 10/2/2017 |
5.0.0.110 | 992 | 9/17/2017 |
4.1.0.106 | 1,054 | 3/12/2017 |
4.1.0.105 | 987 | 3/10/2017 |
4.1.0.104 | 1,020 | 3/9/2017 |
4.0.0.103 | 1,009 | 3/6/2017 |
4.0.0.101 | 1,042 | 2/27/2017 |
4.0.0.100 | 1,042 | 2/26/2017 |
3.0.0.88 | 1,966 | 2/21/2017 |
3.0.0.87 | 1,114 | 12/20/2016 |
3.0.0.85 | 1,317 | 10/22/2016 |
3.0.0.84 | 1,079 | 9/28/2016 |
3.0.0.80 | 1,070 | 8/15/2016 |
3.0.0.77 | 1,095 | 8/11/2016 |
3.0.0.75 | 1,080 | 8/2/2016 |
2.5.0.69 | 1,445 | 7/28/2016 |
2.5.0.64 | 1,184 | 4/19/2016 |
2.5.0.62 | 1,074 | 4/1/2016 |
2.5.0.61 | 1,097 | 3/9/2016 |
2.0.0.57 | 1,250 | 12/9/2015 |
2.0.0.56 | 1,153 | 11/12/2015 |
2.0.0.55 | 1,122 | 10/22/2015 |
2.0.0.53 | 1,138 | 8/18/2015 |
2.0.0.50 | 1,146 | 6/18/2015 |
2.0.0.44 | 1,145 | 4/9/2015 |
2.0.0.39 | 1,320 | 1/5/2015 |
2.0.0.38 | 1,399 | 12/17/2014 |
1.0.4 | 1,305 | 12/1/2014 |
1.0.3 | 1,263 | 11/25/2014 |
1.0.2 | 1,193 | 6/17/2014 |
1.0.1 | 1,196 | 6/17/2014 |
1.0.1-beta15 | 980 | 6/15/2014 |
1.0.0 | 1,206 | 6/12/2014 |
1.0.0-beta11 | 936 | 6/11/2014 |
1.0.0-alpha9 | 967 | 6/10/2014 |