Ho registrato un componente come questa nel mio Global.asax.cs:Come risolvere Autofac InstancePerHttpRequest
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// This is where my error happens, not sure why?
var workContext = container.Resolve<IWorkContext>();
WebWorkContext
classe:
public class WebWorkContext : IWorkContext
{
// Left out other code
}
IWorkContext
interfaccia:
public interface IWorkContext
{
// Left out other code
}
L'errore che sto ottenendo è:
Nessun ambito con un tag corrispondente a "httpRequest" è visibile dall'ambito in cui è stata richiesta l'istanza. Questo in genere indica che un componente registrato come richiesta per HTTP viene rivendicato da un componente SingleInstance() o uno scenario simile. Nell'integrazione Web vengono sempre richieste dipendenze da DependencyResolver.Current o ILifetimeScopeProvider.RequestLifetime, mai dal contenitore stesso .
Come posso farlo funzionare? Questo perché lo voglio in questo modo è perché il contesto di lavoro gestisce cose come ottenere il cliente attuale ecc.
Altre domande. È saggio/le migliori pratiche registrarsi tutti in una volta? Saranno gli scenari che avrò bisogno di aggiungere più componenti in un altro stadio?
Dove stai cercando di fare la vostra risoluzione? – cecilphillip
Mi sto solo divertendo, quindi questo è stato fatto direttamente dopo che il contenitore è stato creato nel metodo di avvio dell'applicazione. Non so come ottenere il contenitore altrove nella mia app? –