Bindicate 1.1.8
See the version list below for details.
dotnet add package Bindicate --version 1.1.8
NuGet\Install-Package Bindicate -Version 1.1.8
<PackageReference Include="Bindicate" Version="1.1.8" />
paket add Bindicate --version 1.1.8
#r "nuget: Bindicate, 1.1.8"
// Install Bindicate as a Cake Addin
#addin nuget:?package=Bindicate&version=1.1.8
// Install Bindicate as a Cake Tool
#tool nuget:?package=Bindicate&version=1.1.8
Bindicate ๐งท
'A blend of "Bind" and "Indicate"'.
Easily register your services in .NET's built-in IoC container with attribute directives.
Features ๐
- Automatic registration of services using custom attributes.
- No need for explicit interface specification for class-only registrations.
- Provides clear visibility and reduces boilerplate code.
- Simple integration with the built-in .NET IoC container.
Supported types
<center>
| Type | Supported| |----------------|----------| |AddTransient |โ๏ธ | |TryAddTransient |โ๏ธ | |AddScoped |โ๏ธ | |TryAddScoped |โ๏ธ | |AddSingleton |โ๏ธ | |TryAddSingleton |โ๏ธ | |TryAddEnumerable|โ | </center>
Installation ๐ฆ
Via NuGet
Install-Package Bindicate
or
dotnet add package Bindicate
Usage
Autowire dependencies
Register Services in a Single Assembly
Add the following code snippet in your project's Startup
class or within a ServiceCollectionExtensions
class:`
services.AddAutowiringForAssembly(Assembly.GetExecutingAssembly());
Register Services Across Multiple Assemblies
If you want to scan and register services across all loaded assemblies, you can do so by adding the following line in your hosting project:
services.AddAutowiring();
Decorate your services:
Basic usage
For class-only registrations:
Simple decorate your class with the attribute to register. You can use an attribute for a specific lifetime.
[AddTransient]
public class SimpleTaskRunner
{
public void RunTask()
{
// ...
}
}
[TryAddSingleton]
public class SimpleService
{
public void DoThing()
{
// ...
}
}
When using interfaces:
Decorate your class with the attribute and provide the interface
[AddScoped(typeof(IMyTaskRunner))]
public class TaskRunner : IMyTaskRunner
{
public void Run()
{
// ...
}
}
public interface IMyTaskRunner
{
void Run();
}
Generics
Define a generic interface:
Decorate the generic interface with the [RegisterGenericInterface]
attribute.
[RegisterGenericInterface]
public interface IRepository<T> where T : BaseEntity
{
void add(T entity);
}
Create the implementation:
[AddTransient(typeof(IRepository<>))]
public class Repository<T> : IRepository<T> where T : BaseEntity
{
public Repository()
{
}
public void add(T entity)
{
// Implementation here
}
}
How to use
You can now resolve instances of this type from IServiceProvider
var customerRepo = serviceProvider.GetService<IRepository<Customer>>();
var productRepo = serviceProvider.GetService<IRepository<Product>>();
Both customerRepo and productRepo will be instances of Repository<T> but will operate on Customer and Product types, respectively.
License
This project is licensed under the MIT license.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. 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. |
-
net6.0
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Can scan all assemblies