注册类型,基于请求cookie

时间:2016-08-10 07:20:37

标签: c# asp.net asp.net-mvc autofac

我使用Autofac,我的类型注册如下:

$data3 = array($data,$data1[0]);

但它给出了一个错误说&#34;请求在此上下文中不可用&#34;。我可以用其他方式注册我的类型,以便能够使用public class Global : HttpApplication, IContainerProviderAccessor { static IContainerProvider _containerProvider; public IContainerProvider ContainerProvider { get { return _containerProvider; }} protected void Application_Start(object sender, EventArgs e) { var builder = new ContainerBuilder(); var myCookie = Request.Cookies["MyTestCookie"]; if (myCookie != null) builder.RegisterType<FirstService>().As<IService>().InstancePerRequest(); else builder.RegisterType<SecondService>().As<IService>().InstancePerRequest(); _containerProvider = new ContainerProvider(builder.Build()); } } 之前的信息吗?

1 个答案:

答案 0 :(得分:3)

在应用程序启动时调用

Application_Start,并为全局应用程序构建 autofac 容器,您不希望在此处注册基于Request的服务。

为了做你想做的事,你可以将两个服务注册为命名服务,并添加第三个注册,根据cookie值解析正确的命名注册。即:

builder.RegisterType<FirstService>().Named<IService>("first").InstancePerRequest();
builder.RegisterType<SecondService>().Named<IService>("second").InstancePerRequest();


builder.Register(c => {
    var myCookie = HttpContext.Current.Request.Cookies["MyTestCookie"];

    if (myCookie != null)
        return c.ResolveNamed<IService>("first"); 
    else
        return c.ResolveNamed<IService>("second"); 
}).InstancePerRequest();