Bindicate 1.1.9
See the version list below for details.
dotnet add package Bindicate --version 1.1.9
NuGet\Install-Package Bindicate -Version 1.1.9
<PackageReference Include="Bindicate" Version="1.1.9" />
<PackageVersion Include="Bindicate" Version="1.1.9" />
<PackageReference Include="Bindicate" />
paket add Bindicate --version 1.1.9
#r "nuget: Bindicate, 1.1.9"
#:package Bindicate@1.1.9
#addin nuget:?package=Bindicate&version=1.1.9
#tool nuget:?package=Bindicate&version=1.1.9
Bindicate 🧷
'A blend of "Bind" and "Indicate"'.
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 per Assembly
Add this line in a project to register all decorated services. You can repeat this line and pass any assembly.
// Register all types in current project
services.AddAutowiringForAssembly(Assembly.GetExecutingAssembly());
// Register types from referenced project
services.AddAutowiringForAssembly(Assembly.GetAssembly(typeof(IInterface)));
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:
Note that this might not work if not all assemblies are loaded at this point in startup configuration!
// Trigger loading of unloaded assemblies to be able to use AddAutowiring:
var triggerAssembly1 = typeof(ProjectName.SomeType);
var triggerAssembly2 = typeof(OtherProjectName.SomeOtherType);
services.AddAutowiring();
//Or just use AddAutowiringForAssembly method
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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.
Version | Downloads | Last Updated |
---|---|---|
1.7.1 | 198 | 2/17/2025 |
1.7.0 | 176 | 10/15/2024 |
1.6.1 | 2,241 | 10/11/2024 |
1.5.1 | 1,726 | 1/3/2024 |
1.5.0 | 201 | 1/2/2024 |
1.3.0 | 203 | 12/21/2023 |
1.2.0 | 397 | 10/23/2023 |
1.1.9 | 210 | 10/18/2023 |
1.1.8 | 181 | 10/16/2023 |
1.1.7 | 169 | 10/16/2023 |
1.1.6 | 187 | 10/11/2023 |
1.1.5 | 200 | 10/10/2023 |
1.1.0 | 186 | 10/9/2023 |
1.0.0 | 183 | 10/9/2023 |
Can scan all assemblies