Это на самом деле не проблема с контейнером IOC.
Хотя, теоретически, вы можете сделать:
Bind<Func<IMyInterface>>().ToConstant( context => context.Kernel.Get<DCF<IMC>>().CreateChannel)
и затем потребуйте Func<IMyInterface>()
в вашем ctor, вызывая его всякий раз, когда вы хотите создать канал.
Проблема в том, что объект, который возвращает CreateChannel (), реализует и IMyChannel
, и IDisposable
, поэтому вы не можете аккуратно использовать блок using вокруг него, если это то, что вы собираетесь вернуть. Это то, что инструментарий генерирует для вас при создании Service Reference, а WCF OOTB здесь не предлагает общего механизма.
Я лично внедряю фабрику, и у меня есть Create<T>()
метод, который выдает объект-обертку, который:
- реализует
IDisposable
- имеет способ вызывать методы через канал.
Его нельзя вводить в пост, так что, надеюсь, кто-то скоро будет с хорошим классом-оберткой такого рода.
Не уверен, подходит ли Синглтон, но я должен осмотреться, чтобы быть уверенным.