使用 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/