У меня есть сумасшедший случай внедрения зависимостей, который я объясню, но сначала позвольте мне показать вам некоторый код:
class Foo : IFoo
{
Foo(
IBar bar,
IFooContext context,
IService service)
{
...
}
}
class Service : IService
{
Service(
IBar bar)
{
...
}
}
Я разрешаю зависимости с помощью Ninject. Все вышеперечисленное InTransientScope
. IBar
предоставляется фабричным методом, который использует одно из IFooContext
свойств для создания. Я хочу добиться, чтобы Service
был введен в Foo
с тем же экземпляром IBar
, который был введен в Foo
.
Я понятия не имею, как этого добиться с помощью Ninject. Это вообще возможно? Если нет, я подумываю раскрыть свойство IBar
в IService
и установить его в конструкторе Foo
, но, честно говоря, мне не нравится эта идея.
Я упростил свой случай ради ... простоты, но на самом деле Foo
- это обработчик сообщений Rebus, IFooContext
- это контекст сообщения, IBar
- это регистратор. Я хочу отформатировать сообщения регистратора, чтобы они включали идентификатор из обрабатываемого сообщения Rebus. И я хочу, чтобы события журнала Foo
и Service
имели этот идентификатор.