Я не знаком с Rapier-LOOM, поэтому я просто буду говорить с точки зрения Unity. Есть пара подходов различной способности / сложности. К счастью, ни один из них не предполагает повторной реализации IUnityContainer.
Самое простое, что вы можете сделать, - это зарегистрировать типы, которые вы хотите создать через ткача с использованием InjectionFactory. Это позволяет вам указать делегата, который будет выполняться для создания экземпляра вместо поведения по умолчанию. Примерно так:
container.RegisterType<ISomething>(
new InjectionFactory(c => {
var newObject = (Something)Weaver.CreateInstance(typeof(Something));
newObject.Property1 = c.Resolve<TypeOfProperty1>();
newObject.Property2 = c.Resolve<TypeofProperty2>();
return newObject;
});
Затем при вызове container.Resolve () этот делегат будет запущен.
Второй подход заключается в создании расширения Unity, которое подключается в вызове Weaver.CreateInstance к цепочке создания. Вы можете использовать собственную стратегию в основной цепочке стратегий или попробовать переопределить план сборки. С первым гораздо проще.
У меня нет ссылок для создания расширений Unity, поэтому я не буду пытаться набирать код в этом текстовом поле прямо сейчас. Посмотрите в Интернете примеры расширений Unity, они довольно просты, когда вы поймете, как обстоят дела вместе.