MVC 使用unity 完成構造注入demo

工程目錄:

1. IService 接口層,新增IUserService . IBaseService 是定義的一個基礎類

namespace IService
{
    public interface IUserService: IBaseService<User>
    {
        string getUserName();
    }
}

2. Service 接口實現層,新增UserServices實現IUserService

namespace Service
{
    public class UserService: BaseService<User>,IUserService
    {
        public string getUserName()
        {
            return "user1";
        }
    }
}

3. 工程 UnityResposityory :unity 管理(當前使用 5.11.2.0 版本),UnityHelper代碼:

    

public class UnityHelper
    {
        public static IUnityContainer container;

        /// <summary>
        /// unity 註冊
        /// </summary>
        public static void Register()
        {
            container = new UnityContainer();
            
            UnityConfigurationSection config = (UnityConfigurationSection)ConfigurationManager.GetSection(UnityConfigurationSection.SectionName);
            config.Configure(container, "containerOne");
        }

        public static T Resolve<T>()
        {
            try
            {
                return container.Resolve<T>();
            }
            catch(Exception ex)
            {
                throw ex;
            }
            
        }

    }

3. 此demo通過配置的方式完成註冊,所以配置webconfig

<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Unity.Configuration" />
  </configSections>
  <unity>
    <containers>
      <container name="containerOne">
        <types>
          <type type="IService.IUserService,IService" mapTo="Service.UserService,Service" />
        </types>
      </container>
    </containers>
  </unity>

4.在站點內新增方法UnityDependencyResolver,實現接口IDependencyResolver(mvc站點和api在不同程序集內,實現方法有一點不同)

namespace TestWeb.Helper
{
    public class UnityDependencyResolver : IDependencyResolver
    {
        protected IUnityContainer container;

        public UnityDependencyResolver(IUnityContainer container)
        {
            this.container = container;
        }

        /// <summary>
        /// mvc webAPI 需要實現此方法
        /// </summary>
        /// <returns></returns>
        public IDependencyScope BeginScope()
        {
            return this;
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        public object GetService(Type serviceType)
        {
            try
            {
                return container.Resolve(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return null;
            }
        }

        public IEnumerable<object> GetServices(Type serviceType)
        {
            try
            {
                return container.ResolveAll(serviceType);
            }
            catch (ResolutionFailedException)
            {
                return new List<object>();
            }
        }

    }
}

5. 在global.asax 實現註冊unity

   a. web站點註冊

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            UnityHelper.Register();
            //mvc 網站註冊方法
            DependencyResolver.SetResolver(new UnityDependencyResolver(UnityHelper.container));
        }

   b. web api 註冊

 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            UnityHelper.Register();

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(UnityHelper.container);
            
        }

配置完成就可以使用了:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章