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的等价物是什么?

IoC Unity:为依赖注入注册实体框架ObjectContext

注册类型时,您不应该传递该类型的实例,而是(可选)一些数据,这些数据将帮助Unity根据请求实例化该类型(在您的情况下是连接字符串):

container.RegisterType<IMyContext, MyContext>(new InjectionConstructor(environment.ConnectionString));

您尝试自己实例化上下文并注册它,可以使用编译

container.RegisterInstance<IMyContext>(new MyContext(environment.ConnectionString));

但这会导致你的上下文像Singleton一样有效地运行,在实体框架上下文的情况下,这是一种已知的反模式,会给你带来很多麻烦。