我正在构建一个Web应用程序,我正在使用AutoFac进行依赖注入。
对于这个项目,当我解析Entity Framework的DbContext的依赖关系时,我需要传递一个自定义参数,因为连接字符串是动态的,可以根据这个参数进行更改。
此参数来自查询字符串(来自其他应用程序)。我需要以某种方式拦截它,在Injector初始化之前获取此值,但我不知道这样做的最佳方法,因为Injector的初始化在Application_Start()方法中。
所以,我有以下代码:
//Entity Framework DbContext
public class MyContext : DbContext
{
public MyContext(int portalCode){...}
}
//AutoFac registering:
container.Register<MyContext>(c => new MyContext(how to pass the parameter here ??)).InstancePerRequest();
其中,容器是默认的ContainerBuilder
然后,在Application_Start()
中调用AutofacInitialize就像在AutoFac文档中一样。
如何在使用Autofac的依赖关系解析器中实现这一目标?
答案 0 :(得分:1)
长话短说,您可能只是这样做:
Diff = (Rate.A - Rate.B) / Rate.B
使用提供程序类
的更详细的解决方案builder.Register<MyContext>(c =>
new MyContext(int.Parse(HttpContext.Current.Request.QueryString["PortalCode"])))
.InstancePerRequest();
MyContext public interface IPortalCodeProvider
{
int GetPortalCode();
}
public class PortalCodeProvider : IPortalCodeProvider
{
public const string PortalCodeQueryStringKey = "PortalCode";
public const int DefaultPortalCode = 123;
public int GetPortalCode()
{
var portalCodeString = HttpContext.Current.Request.QueryString[PortalCodeQueryStringKey];
int portalCode;
if (int.TryParse(portalCodeString, out portalCode)) return portalCode;
else return DefaultPortalCode;
}
}
签名为ctor
Autofac课程注册:
MyContext(IPortalCodeProvider portalCodeProvider)
答案 1 :(得分:0)
传入参数值的变量:
var parameter = "my value";
container.Register<MyContext>(c => new MyContext(parameter)).InstancePerRequest();