Я начал использовать Ninject, в этом относительно небольшом проекте, и столкнулся с проблемой: у меня есть этот класс
class SomeService : ISomeService
это зависит от
class BizLogicModule : IBizLogicModule
что в свою очередь зависит от
class DataRepository : IDataRepository
DataRepository
имеет ctor, который выглядит следующим образом:
DataRepository(BizEntityModel context)
Теперь мне нужно иметь возможность использовать один экземпляр BizEntityModel
на нескольких экземплярах IDataRepository
.
Мне также нужно создать IDataRepository
на протяжении жизни IBizLogicModule
. IBizLogicModule
не знает о Ninject, и я хочу сохранить его таким.
поэтому моя проблема:
как подключить все это, используя ядро Ninject, в то время как:
не нужно передавать экземпляр ядра вокруг слоев.
оставляя читаемый код близким к тому, что был до Ninject (я только что начал использовать фабричный метод).
Простая часть проводки, которую я получил до сих пор:
Bind<SomeService>().To<ISomeService>();
Bind<BizLogicModule>().To<IBizLogicModule>();
Bind<DataRepository>().To<IDataRepository>();
Bind<BizEntityModel>().To<BizEntityModel>(); //ToSelf()
// .WithConstructorArgument(context => Kernel.Get<BizEntityModel>)
Ваше руководство очень ценится
РЕДАКТИРОВАТЬ: Спасибо за ваши ответы!
Вот еще некоторые данные, которые были запрошены:
BizEntityModel
зарегистрировано в Ninject (код обновлен).
если я правильно понимаю: я могу создать экземпляры IDataRepository
в IBizLogicModule
, используя «фабричный метод». но это оставляет меня с:
1) Мне нужно передать BizEntityModel
фабричному методу, иногда его отруби, а иногда и существующий экземпляр. используя фабричный метод, он будет создавать заново каждый раз.
2) это проблема, что SomeService
находится в другой сборке, и только он имеет ссылку на Ninject.dll?