4

我需要在 global.asax 中的应用程序启动时执行一些一次性代码。我已经启动并运行了大量注册的 autofac,但问题是我无法弄清楚如何解决或将依赖项注入到我 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; }
}
4

1 回答 1

2

这使我最终能够解决我的依赖关系。

using(var scope = container.BeginLifetimeScope("AutofacWebRequest"))
{
    scope.Resolve<SecurityConfig>().RegisterActivities();
}
于 2013-08-15T18:13:24.543 回答