我需要在 global.asax 中启动我的应用程序时执行一些一次性代码。我已经通过大量注册启动并运行 autofac,但问题是我无法弄清楚如何解决或将依赖项注入(inject)到我的 global.asax 中的 SecurityConfig.RegisterActivities() 中。
我尝试使用 autofac 容器在 global.asax 中自己手动解决依赖关系,但它引发了异常“从请求实例的范围内看不到带有与‘AutofacWebRequest’匹配的标签的范围。强>”
我如何将此依赖项添加到该类中?
protected void Application_Start()
{
var builder = new ContainerBuilder();
DependencyRegistrar dr = new DependencyRegistrar();
dr.Register(builder);
new SecurityConfig().RegisterActivities(); // this needs injecting into or resolving of IServiceManager instance
}
public class DependencyRegistrar
{
public virtual IContainer Register(ContainerBuilder builder)
{
builder.RegisterType<ServiceManager>().As<IServiceManager>().InstancePerHttpRequest();
builder.RegisterType<SecurityConfig>().AsSelf().PropertiesAutowired().InstancePerDependency();
}
}
public class SecurityConfig
{
public void RegisterActivities()
{
ServiceManager.DoSomething();
}
public IServiceManager ServiceManager { get; set; }
}
最佳答案
这让我最终解决了我的依赖问题。
using(var scope = container.BeginLifetimeScope("AutofacWebRequest"))
{
scope.Resolve<SecurityConfig>().RegisterActivities();
}
关于c# - 使用 autofac 在 global.asax 中解析或注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18125716/