public static void RegisterCollectionLazyAndReferred(this ICollectonLazy collectionLazy, object owner) { Action <object> onValueCreated = null; onValueCreated = o => { var values = (o as IEnumerable).Cast <object>().ToArray(); var length = values.Length; ReferenceManager refMgr = ReferenceManager.Instance; for (int i = 0; i < length; i++) { refMgr.RegisterHandle(values[i], collectionLazy.Kernels[i], collectionLazy.Components[i]); refMgr.RegisterReference(owner, values[i]); } collectionLazy.ValueCreated -= onValueCreated; }; collectionLazy.ValueCreated += onValueCreated; }
public void Inject(IComponentContext ctx) { if (IsMatch) { if (refMgr.Enabled) { List <object> references = new List <object>(); var args = Dependencies.Select(p => PopulateArgument(references, p)).ToArray(); ctx.Instance = Creator(args); refMgr.RegisterHandle(ctx.Instance, ctx.Kernel, ctx.Component); foreach (var @ref in references) { refMgr.RegisterReference(ctx.Instance, @ref); } } else { ctx.Instance = Creator(Dependencies.Select(p => p.ValueProvider()).ToArray()); } } }