MVC 使用unity 完成构造注入demo

1 篇文章 0 订阅

工程目录:

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);
            
        }

配置完成就可以使用了:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值