diff --git a/microDI/Container.cs b/microDI/Container.cs index 9ae0a52..1f7ab9e 100644 --- a/microDI/Container.cs +++ b/microDI/Container.cs @@ -63,6 +63,16 @@ public IReferencedObject RegisterAs<TInterface, TImplementation>( c => instanceCreatorFunc(c), typeof(TImplementation), lifeCycle)); } + public IReferencedObject Register<TClass>(ILifeCyclePolicy lifeCycle) + { + RuntimeCheck.NotNull(lifeCycle, nameof(lifeCycle)); + + var registeringType = typeof(TClass); + + return _registryService.Register( + registeringType, new RegisteredObject(null, registeringType, lifeCycle)); + } + public IReferencedObject Register<TClass>( Func<IContainer, TClass> instanceCreatorFunc, ILifeCyclePolicy lifeCycle) { @@ -82,7 +92,7 @@ public object Resolve(Type resolveType) public TInterface Resolve<TInterface>() { - return (TInterface)Resolve(typeof(TInterface)); + return (TInterface) Resolve(typeof(TInterface)); } public IReferencedObject GetReferencedType<TClass>() @@ -90,4 +100,4 @@ public IReferencedObject GetReferencedType<TClass>() return new ReferencedObject(_registryService.GetRegisteredObject(typeof(TClass)), _registryService); } } -} +} \ No newline at end of file diff --git a/microDI/IContainer.cs b/microDI/IContainer.cs index bcb65b0..1cc1959 100644 --- a/microDI/IContainer.cs +++ b/microDI/IContainer.cs @@ -42,7 +42,8 @@ public interface IContainer /// <param name="lifeCycle">Life cycle of registered type.</param> /// <see cref="IReferencedObject"/> /// <see cref="ILifeCyclePolicy"/> - [NotNull] IReferencedObject RegisterAs<TInterface, TImplementation>([NotNull] ILifeCyclePolicy lifeCycle) + [NotNull] IReferencedObject RegisterAs<TInterface, TImplementation>( + [NotNull] ILifeCyclePolicy lifeCycle) where TImplementation : TInterface; /// <summary> @@ -59,6 +60,16 @@ [NotNull] IReferencedObject RegisterAs<TInterface, TImplementation>( [NotNull] ILifeCyclePolicy lifeCycle) where TImplementation : TInterface; + /// <summary> + /// Register class and creator function to be used for instantiation with life + /// cycle. + /// </summary> + /// <typeparam name="TClass">Type of class to be registered</typeparam> + /// <param name="lifeCycle">Life cycle of registered type.</param> + /// <see cref="IReferencedObject"/> + /// <see cref="ILifeCyclePolicy"/> + [NotNull] IReferencedObject Register<TClass>([NotNull] ILifeCyclePolicy lifeCycle); + /// <summary> /// Register class and creator function to be used for instantiation with life /// cycle.