IoC Unity:为依赖注入注册实体框架ObjectContext
本文关键字:注册 实体 框架 ObjectContext 注入 依赖 Unity IoC | 更新日期: 2023-09-27 18:20:36
使用Unity注册EF ObjectContext以进行注入的最佳方式是什么?
我试过这个:
var environment = new EnvironmentInformationProvider();
container.RegisterType<MyContext>(new MyContext(environment.ConnectionString));
但这导致了这个错误:
Error CS1503 Argument 2: cannot convert from 'MyContext' to
'Microsoft.Practices.Unity.InjectionMember'
我不知道该怎么解决。。。另外,我不认为这会设置实例生存期。
所以,经过一些挖掘,我发现了这个:
builder.RegisterType<MyContext>()
.As<IMyContext>()
.InstancePerLifetimeScope();
这是Autofac代码。切换到它不是一种选择,因为我正在开发一个现有的应用程序(Unity也应该能够做到这一点)。
假设以上就是我所需要的,那么Unity的等价物是什么?
注册类型时,您不应该传递该类型的实例,而是(可选)一些数据,这些数据将帮助Unity根据请求实例化该类型(在您的情况下是连接字符串):
container.RegisterType<IMyContext, MyContext>(new InjectionConstructor(environment.ConnectionString));
您尝试自己实例化上下文并注册它,可以使用编译
container.RegisterInstance<IMyContext>(new MyContext(environment.ConnectionString));
但这会导致你的上下文像Singleton一样有效地运行,在实体框架上下文的情况下,这是一种已知的反模式,会给你带来很多麻烦。