每次都会创建Unity WebApi容器

时间:2013-05-11 19:19:08

标签: c#-4.0 asp.net-web-api unity-container

我正在使用web api MVC 4创建一个简单的Web服务,我使用Unity web api作为我的IOC,如何在文档中说它将其添加到application_start

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        Bootstrapper.Initialise();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

表示为每个请求创建

public static void Initialise()
    {
        _container = BuildUnityContainer();

        GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(_container);
    }

    private static IUnityContainer BuildUnityContainer()
    {
        _container = new UnityContainer();
        // register all your components with the container here

        LoggingUtilities.LoadConfigFile("ThirdParty.log4net");
        ILog log = LoggingUtilities.DefaultLogger;
        _container.RegisterInstance<ILog>(log);

        log.InfoFormat("In BuildUnityContainer");
        OpClientWrapper wrapper = new OpClientWrapper(log);

        _container.RegisterInstance<OpClientWrapper>(wrapper, new ContainerControlledLifetimeManager());

        return _container;
    }

我希望我的Opclient包装器只为所有请求创建一次,是否可能?

1 个答案:

答案 0 :(得分:1)

Application_Start仅在应用程序启动时触发一次(请参阅下面的注释) - 不是每次请求。

请记住,以下内容可能会导致应用程序重新启动...

  • 线程池重新启动
  • 将新dll放入bin文件夹
  • IIS重置

因此,当您正在观看时,可能会导致应用程序启动&#34;这使它看起来更频繁地被调用。