如何将参数从查询字符串传递到Autofac中的组件注册?

时间:2017-01-26 18:37:51

标签: c# asp.net-mvc autofac

我正在构建一个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的依赖关系解析器中实现这一目标?

2 个答案:

答案 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();