4

global.asax でアプリケーションの開始時にワンタイム コードを実行する必要があります。私はすでに autofac を起動して多数の登録を実行していますが、問題は、global.asax 内にあるSecurityConfig.RegisterActivities()に依存関係を解決または挿入する方法がわからないことです。

autofac コンテナーを使用して、global.asax の依存関係を自分で手動で解決しようとしましたが、例外がスローされました

この依存関係をそのクラスに取得するにはどうすればよいですか?

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 に答える