0

我正在使用 StructureMap.MVC5,它依赖 PreApplicationStart 方法来注册一个 HttpModule 并初始化 IoC 容器。此时是否可以获取页面正在执行的服务器名称,以便我可以在 IoC 初始化中设置特定于环境的属性?

4

1 回答 1

0

我能够通过将 IoC 初始化移动到已经设置的Application_BeginRequest方法来解决这个问题。HttpContext为了确保 IoC 容器不会在每次调用时重新初始化Application_BeginRequest,我可以使用互斥块,从而无需将此代码移动到页面生命周期早期的某个位置。

public class FirstInitialization
{
    private static Object s_lock = new Object();

    public static string URL { get; protected set; }

    // Initialise only on the first request
    public static string Initialize(HttpContext context)
    {
        if (string.IsNullOrEmpty(URL))
        {
            lock (s_lock)
            {
                if (string.IsNullOrEmpty(URL))
                {
                    URL = HttpContext.Current.Request.Url.AbsoluteUri;
                }

                DependencyResolver.SetResolver(IoC.GetDependencyResolver(URL));

            }
        }

        return URL;
    }
}
于 2015-03-24T13:32:50.647 回答