我一直在搜索整天,无法弄清楚这一点。我希望以前没有问过。StructureMap构造函数参数范围
ObjectFactory.Initialize(
x =>
{
x.For(typeof (IRepository<>))
.Use(typeof(Repository<>))
.CtorDependency<DbContext>("dbContext")
.Is(new DbContext());
}
);
我需要结构图来在每次创建'Repository'的新实例时使用'DbContext'的新实例。现在我相信它正在重用'DbContext'及其引发的问题。我相信它只是重复使用'DbContext',因为我已经尝试将'Repository'的生命周期设置为PerRequest,结果相同。任何帮助是极大的赞赏。
我是新来的StructureMap和依赖注入,所以我可能在我的分析不正确。
更新
@PHeiberg非常感谢你的回答。它响了一声钟,我记得看到以'()'开头的lambda表达式,我从未见过。我非常兴奋,这是它。 我尝试了你的代码逐字,它不能解决Ctor所以我改变它。
x.For(typeof(IRepository<>))
.HttpContextScoped()
.Use(typeof(Repository<>))
.CtorDependency<DbContext>("dbContext")
.Is(() => new DbContext());
我收到以下编译错误
“无法解析法 '是(的Lamda exression)',考生是:StructureMap.Pipeline.ConfiguredInstance是(对象)(类ChildInstanceExpression)StructureMap.Pipeline .ConfiguredInstance是(StructureMap.Pipeline.Instance)(在类ChildInstanceExpression中)。
我记得之前看到过这条消息,它导致我试图注册我的dbContext类型,尽管我不知道你是否可以,如果我是正确地做,说x.For(具体类型)。使用(具体类型)。
我不知道StructureMap可言,但看着你的代码,我猜它总是用你的'DbContext'实例在注册'Repository'时创建(或者当委托被调用时 - 可能只有一次为你的应用程序)。如果你想让你的容器控制'DbContext'的生命周期,你可能需要单独注册它。 – 2011-04-21 02:24:46