Я искал весь день и не могу понять это. Надеюсь, об этом раньше не спрашивали.
ObjectFactory.Initialize(
x =>
{
x.For(typeof (IRepository<>))
.Use(typeof(Repository<>))
.CtorDependency<DbContext>("dbContext")
.Is(new DbContext());
}
);
Мне нужна структура, чтобы использовать новый экземпляр DbContext каждый раз, когда он создает новый экземпляр репозитория. Сейчас я считаю, что он повторно использует DbContext и вызывает проблемы. Я полагаю, что он повторно использует только «DbContext», потому что я попытался установить жизненный цикл в «Репозитории» на PerRequest с тем же результатом. Любая помощь очень ценится.
Я новичок в StructureMap и Dependency Injection, поэтому я могу ошибаться в своем анализе.
Обновление
@ Фейберг, большое спасибо за ваш ответ. Звонил звонок, и я помню, что лямбда-выражение, начинающееся с '()', я не видел раньше. Я был очень взволнован, что это было это.
Я пробовал ваш код дословно, и он не может разрешить Ctor, поэтому я изменил его на это.
x.For(typeof(IRepository<>))
.HttpContextScoped()
.Use(typeof(Repository<>))
.CtorDependency<DbContext>("dbContext")
.Is(() => new DbContext());
И я получаю следующую ошибку компиляции
"Не удается разрешить метод 'Is (выражение Lamda)', кандидатами являются: StructureMap.Pipeline.ConfiguredInstance Is (object) (в классе ChildInstanceExpression) StructureMap.Pipeline.ConfiguredInstance Is (StructureMap.Pipeline.Instance) (в классе ChildInstanceExpression) .
Я видел это сообщение до того, как вспомнил, и это привело к тому, что я попытался зарегистрировать свой тип dbContext, хотя я не знаю, можете ли вы, и правильно ли я это делал, скажем, x.For (конкретный тип). Использование (конкретный тип) ,