c# - IoC 统一 : registering an Entity Framework ObjectContext for Dependency Injection

标签 c# .net entity-framework dependency-injection

使用 Unity 注册用于注入(inject)的 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));

但这会导致您的上下文像单例一样有效地运行,并且在 Entity Framework 上下文的情况下,这是一种已知的反模式,会给您带来很多麻烦。

关于c# - IoC 统一 : registering an Entity Framework ObjectContext for Dependency Injection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544423/

相关文章:

c# - 如何在C#中获取登录用户的OU?

.net - 使用 Microsoft.Web.Administration 中的 ServerManager 类时出现 COM 异常

c# - 带有 Entity Framework 的 SQL Server Compact Edition

c# - 如何在 Html.TextBoxFor 中使用 ShortDate 字符串格式

c# - 连接字符串 - N 层应用程序

c# - 如何在 ASP.NET GridView 中的 BoundField 上方添加一行

c# - C#中超出基本类型的数字

c# - 如何在场景之间保持值(value)?

C# 相等运算符覆盖(== 和 !=)

.net - 在 Compact Framework 中获取文件版本信息