Я добавлю ответ, который у меня есть, так как он в некоторой степени отвечает на мой вопрос, хотя требует некоторой работы, чтобы сделать его более обобщенным c. Я понятия не имею, как применить этот шаблон к каждому DAO в сборке, но, по крайней мере, он работает для одного класса. Я просто должен повторить это для каждого класса, к которому я хочу добавить перехватчик.
_container.Register(
Component.For<IGroceryDao>()
.UsingFactoryMethod(() => ServiceFactory.BuildGroceryDao(_container.Resolve<IDbTransaction>()))
.LifestyleScoped());
Он использует фабричный метод в ServiceFactory (просто класс, который я создал, который содержит метод ниже), чтобы создать DAO с прокси-сервером, к которому применен перехватчик:
public static IGroceryDao BuildGroceryDao(IDbTransaction transaction)
{
return (IGroceryDao) new ProxyGenerator()
.CreateInterfaceProxyWithTargetInterface<IGroceryDao>(new Neo4jGroceryDao(transaction), new ExceptionInterceptor());
}
Объект транзакции - это то, что уже зарегистрировано в контейнере, в котором нуждается DAO, поэтому я просто разрешаю его и передаю его фабричному методу.
Кажется, все равно работает. Если кто-нибудь может посоветовать, как сделать это более обобщенным c, это было бы здорово, но, по крайней мере, я думаю, что это отвечает на вопрос, как я его задавал.