首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将从工厂创建的注册

将从工厂创建的注册
EN

Stack Overflow用户
提问于 2022-04-21 14:22:58
回答 1查看 67关注 0票数 1

我试图使用DryIOC解析一个作用域的实体框架上下文。虽然这个注册有效,但感觉很奇怪:

代码语言:javascript
复制
container.Register<MyDbContext>( Reuse.ScopedTo<IMarkerInterface>(), Made.Of(() => Arg.Of<IDbContextFactory<MyDbContext>>().CreateDbContext()) );

特别是,Arg.Of的用途似乎是不同的。有更好的方法来编写Made部件吗?

我可以很容易地用(微软-DI-) ServiceCollectionAddDbContextFactory()注册一个工厂,所以我这样做了。然后,通过使用DryIOC扩展从ServiceCollection创建应用程序的其余部分使用的DryIoc.Microsoft.DependencyInjection容器。

在现在的DryIOC世界中,我想要一个限定范围的MyDbContext。因此,我使用MyDbContext注册ScopedTo,但是我希望每个上下文实例都由以前注册的工厂(在ServiceCollection世界中)生成。因此,DryIOC应该解析一个工厂,调用create并将结果放入当前范围,每次注入一个MyDbContext

编辑:我已经升级到

代码语言:javascript
复制
container.Register<MyDbContext>( Reuse.ScopedTo<IMarkerInterface>(), Made.Of(container.Resolve<IDbContextFactory<MyDbContext>>(), factory => factory.CreateDbContext()) );

这仍然是臭气熏天,因为Resolve是不必要的早期,但总感觉好一点。

代码语言:javascript
复制
container.Register<MyDbContext>( Reuse.ScopedTo<IMarkerInterface>(), Made.Of(() => container.Resolve<IDbContextFactory<MyDbContext>>(), factory => factory.CreateDbContext()) );

我想是完美的,但不起作用(至少在这种语法中是这样的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-25 22:58:32

据我所知你需要这样的东西:

代码语言:javascript
复制
container.RegisterDelegate<IDbContextFactory<MyDbContext>, MyDbContext>(
    factory => factory.CreateDbContext(),
    Reuse.ScopedTo<IMarkerInterface>());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71956113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档