c# - 使用 autofac 在 global.asax 中解析或注入(inject)依赖项

标签 c# dependency-injection autofac

我需要在 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/

相关文章:

c# - 将小数(2.75)转换为时间(2 :45)

c# - 为什么不在 C# 中使用静态析构函数

java - 访问在 Guice 的根对象图中不可配置的 Map<String, Interface-Impl>

c# - 使用 IoC 的项目中目录的推荐文件夹结构是什么

javascript - 使用 Node.js 进行依赖注入(inject)

autofac - 如何使用 Autofac 注入(inject)同一对象的两个实例?

c# - 从托管代码调用非托管方法

c# - 面向对象层

c# - 使用 Autofac 将 SignalR IHubContext 注入(inject)服务层

Autofac 垃圾收集 - BeginLifetimeScope