如何从控制器获取统一配置中定义的统一容器?

How to get unity container defined in unity config from controller?

我正在尝试在 Mvc 应用程序中配置 Microsoft unity

我在unity.config中定义了统一配置:

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer(); 
        container.RegisterType<IAccessLogBLL, AccessLogBLL>();            
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}

我从 global.asax 调用该配置:

 protected void Application_Start()
    {
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

        UnityConfig.RegisterComponents();


    }

现在我已经在调用 resolve 方法之前从控制器定义了容器及其配置并且工作正常,但是我如何使用 unity.config 中定义的容器? 是否有任何 "getContainer" 方法或者我必须为统一容器声明全局变量?

   private IAccessLogBLL _accessLogBLL;
   public AccessLogController()
    {

        IUnityContainer container = new UnityContainer();            
        container.RegisterType<IAccessLogBLL, AccessLogBLL>();
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
        _accessLogBLL = container.Resolve<IAccessLogBLL>(new ParameterOverride("unitOfWork", UnitOfWork));
    }

谢谢,抱歉我的英语不好

最后我将容器变量声明为 static,它工作正常。但我现在不认为这是最好的解决方案。

public static class UnityConfig
{
    public static IUnityContainer container;
    public static void RegisterComponents()
    {
        container = new UnityContainer(); 
        container.RegisterType<IAccessLogBLL, AccessLogBLL>();            
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}

并形成我的控制器构造函数:

public AccessLogController()
    {

        _accessLogBLL = UnityConfig.container.Resolve<IAccessLogBLL>(new ParameterOverride("unitOfWork", UnitOfWork));

    }