我使用Autofac,我的类型注册如下:
$data3 = array($data,$data1[0]);
但它给出了一个错误说"请求在此上下文中不可用"。我可以用其他方式注册我的类型,以便能够使用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());
}
}
之前的信息吗?
答案 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();