Utilities
Is registered?
With the IsRegistered()
function, you can find out whether a service is registered into the container or not.
It returns true
only when the container has a registration with the given type (and name). It only checks the actual container's registrations. For every cases, you should use the CanResolve()
method.
- Generic API
- Runtime type API
- Named
bool isIJobRegistered = container.IsRegistered<IJob>();
bool isIJobRegistered = container.IsRegistered(typeof(IJob));
Named
bool isIJobRegistered = container.IsRegistered<IJob>("DbBackup");
Can resolve?
There might be cases when you are more interested in whether a service is resolvable from the container's actual state rather than finding out whether it's registered.
CanResolve()
returns true
only when at least one of the following is true:
- The requested type is registered in the current or one of the parent containers.
- The requested type is a closed generic type, and its open generic definition is registered.
- The requested type is a wrapper (
IEnumerable<>
,Lazy<>
,Func<>
,KeyValuePair<,>
,ReadOnlyKeyValue<,>
,Metadata<,>
,ValueTuple<,>
, orTuple<,>
), and the underlying type is registered. - The requested type is not registered, but it's resolvable, and unknown type resolution is enabled.
- Generic API
- Runtime type API
- Named
bool isIJobResolvable = container.CanResolve<IJob>();
bool isIJobResolvable = container.CanResolve(typeof(IJob));
bool isIJobResolvable = container.CanResolve<IJob>("DbBackup");
Get all mappings
You can get all registrations in a key-value pair collection (where the key is the service type and the value is the actual registration) by calling the .GetRegistrationMappings()
method.
IEnumerable<KeyValuePair<Type, ServiceRegistration>> mappings =
container.GetRegistrationMappings();
Registration diagnostics
You can get a much more readable version of the registration mappings by calling the .GetRegistrationDiagnostics()
method.
RegistrationDiagnosticsInfo
has an overridden .ToString()
method that returns the mapping details formatted in a human-readable form.
container.Register<IJob, DbBackup>("DbBackupJob");
container.Register(typeof(IEventHandler<>), typeof(EventHandler<>));
IEnumerable<RegistrationDiagnosticsInfo> diagnostics =
container.GetRegistrationDiagnostics();
diagnostics.ForEach(Console.WriteLine);
// output:
// IJob => DbBackup, name: DbBackupJob
// IEventHandler<> => EventHandler<>, name: null