Cleanup DI

This commit is contained in:
Stephan
2016-12-19 17:37:18 +01:00
parent 9eb467f38a
commit 3576794a64
2 changed files with 14 additions and 5 deletions

View File

@@ -54,11 +54,14 @@ namespace Umbraco.Core.DI
var argType = typeof(IEnumerable<TItem>);
var ctorArgTypes = new[] { argType };
var constructor = typeof(TCollection).GetConstructor(ctorArgTypes);
if (constructor == null) throw new InvalidOperationException();
var exprArg = Expression.Parameter(argType, "items");
var exprNew = Expression.New(constructor, exprArg);
var expr = Expression.Lambda<Func<IEnumerable<TItem>, TCollection>>(exprNew, exprArg);
_collectionCtor = expr.Compile();
if (constructor != null)
{
var exprArg = Expression.Parameter(argType, "items");
var exprNew = Expression.New(constructor, exprArg);
var expr = Expression.Lambda<Func<IEnumerable<TItem>, TCollection>>(exprNew, exprArg);
_collectionCtor = expr.Compile();
}
// else _collectionCtor remains null, assuming CreateCollection has been overriden
// we just don't want to support re-registering collections here
var registration = Container.GetAvailableService<TCollection>();

View File

@@ -275,6 +275,12 @@ namespace Umbraco.Core.DI
}, null);
}
/// <summary>
/// Registers and instanciates a collection builder.
/// </summary>
/// <typeparam name="TBuilder">The type of the collection builder.</typeparam>
/// <param name="container">The container.</param>
/// <returns>The collection builder.</returns>
public static TBuilder RegisterCollectionBuilder<TBuilder>(this IServiceContainer container)
{
// make sure it's not already registered