Я использую Ninject 3.2.2.0, и я пытаюсь связать метод async.C# Ninject: Как привязываться к методу async
Это то, что я до сих пор:
kernel.Bind<Task<MyInterface>>().ToMethod(async ctx =>
{
var someData = await DoSomethingAsync();
return new SomethingElse(someData);
}).InRequestScope();
Мой метод DoSomethingAsync
никогда не вызывается. Я считаю, что его не вызывают, потому что запрашивается MyInterface
, а не Task<MyInterface>
.
Любые идеи?
Скажите, что есть метаданные объекта CurrentUser, которые должны быть запрошены из службы или базы данных или того и другого. И скажите, что у вас есть 5 объектов домена, которые зависят от CurrentUser. Собираетесь ли вы запросить эти данные 5 раз за запрос? Почему бы не связать Task с методом, который может его вернуть? Просто потому, что он возвращает задание, это не значит, что МОК его ждет. Объекты домена, которые требуют Task , могут ждать его. Разница в том, что данные запрашиваются только один раз. Зависимости все ждут одной и той же задачи. –
@StewartAnderson: У меня такое ощущение, что вы задаете здесь новый вопрос. Если вы разместите его как таковое здесь на SO и предоставьте соответствующие данные (какой-то примерный код будет полезен) и разместите ссылку на этот вопрос здесь, в комментариях, я сделаю все возможное, чтобы ответить на этот вопрос. – Steven
Сказать, что ваш МОК не должен иметь ничего общего с ним, помешало бы моему решению проблемы. Чтобы обобщить мое решение до одной строки кода привязки IOC: kernel.Bind <Задача>(). ToMethod (c => UserProvider.Get()). InRequestScope(); Все, что требует текущего пользователя, теперь получает асинхронно через IOC. Объекты, созданные IOC, которые требуют Task ждут задачи, но все эти объекты ждут одну и ту же задачу из-за .InRequestScope(). –