首页 > 技术文章 > WebActivatorEx 注入时的使用

windy2008 2016-04-29 12:19 原文

WebActivator类库提供了3种功能,允许分别在Application_Start初始化之前,之后以及ShutDown的时候,分别执行指定的代码,并且允许多次指定。示例如下:

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(A.InitClass1), "PreStart")]
[assembly: WebActivatorEx.PostApplicationStartMethod(typeof(A.PostClass1), "PostStart")]
[assembly: WebActivatorEx.ApplicationShutdownMethod(typeof(A.ShutDownClass1), "ShutDown")]
View Code

下面提供一个项目中的使用示例:

using System.Linq;
using System.Web.Mvc;
using Microsoft.Practices.Unity.Mvc;

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(TestPrj.Common.PreUnityActivator), "Start")]

namespace TestPrj.Common
{
    public static class PreUnityActivator
    {
        /// <summary>Integrates Unity when the application starts.</summary>
        public static void Start() 
        {
            var container = UnityConfig.GetConfiguredContainer();

            FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First());
            FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container));

            DependencyResolver.SetResolver(new UnityDependencyResolver(container));

            // if you want to use PerRequestLifetimeManager
            // Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule));
        }
    }
}
View Code
using System;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

using TestPrj.DAL;
using TestPrj.Modules;

namespace TestPrj.Web
{
    /// <summary>
    /// Main container.
    /// </summary>
    public class UnityConfig
    {
        private static Lazy<IUnityContainer> container = new Lazy<IUnityContainer>(() =>
        {
            var container = new UnityContainer();
            RegisterTypes(container);
            return container;
        });

        public static IUnityContainer GetConfiguredContainer()
        {
            return container.Value;
        }

        public static void RegisterTypes(IUnityContainer container)
        {
            // NOTE: To load from web.config uncomment the line below. Make sure to add a Microsoft.Practices.Unity.Configuration to the using statements.
            // container.LoadConfiguration();

            // Register your types here
            container.RegisterType<IPreUnitOfWork, ETravelEntities>(new PerResolveLifetimeManager());

            // Register services.
            container.RegisterType<IConfigService, ConfigService>();
        }
    }
}
View Code

 

推荐阅读