unity(c# ioc框架) 使用总结

这里的unity指的是完成依赖注入的unity而不是游戏引擎。

原本项目完成依赖注入用的是spring.net,但是spring.net已经很久没人维护了,所以微软官方推出的Unity成为了替代spring.net的最佳候选之一。

简单控制台demo:

 

首先新建控制台应用,nuget搜索unity并安装。

using System;  
using Unity;
using Unity.Attributes;

namespace ConsoleApp1
{
    public class Index
    {
        
        [Dependency]
        public virtual IUserService UserService { set; get; }

        public static void Main(string[] args)
        {
            var container = new UnityContainer();
            container.RegisterType<IUserService, UserService>();           //注册
            IUserService userService = container.Resolve<IUserService>();  //获取
            userService.Hello();
        }
    }

    public interface IUserService
    {
        void Hello();
    }

    class UserService : IUserService
    {
        public void Hello()
        {
            Console.WriteLine("hello");
        }
    }
}

 

在asp.net mvc里使用unity:

1、新建asp.net mvc应用,nuget安装unity.mvc

2、新建类库BLL、IBLL,完成后目录如下:

3、BLL新建UserService,IBLL新建IUserService,实现Hello方法

namespace IBLL
{
    public interface IUserService
    {
        string Hello();
    }

}
using IBLL;

namespace BLL
{
    public class UserService:IUserService
    {
        public string Hello()
        {
            return "hello";
        }
    }
}

4:在Global.asax.cs里填写配置。示例如下:

using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using BLL;
using IBLL;
using Unity;
using Unity.AspNet.Mvc;

namespace WebApp
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            var container = BuildUnityContainer();        //自定义BuildUnityContainer方法,获取容器
            DependencyResolver.SetResolver(new UnityDependencyResolver(container));

        }

        IUnityContainer BuildUnityContainer()
        {
            UnityContainer container = new UnityContainer();
            container.RegisterType<IUserService, UserService>();return container;
        }
    }
}

 

5、在Control中获得UserService类并使用

using System.Web.Mvc;
using IBLL;

namespace WebApp.Controllers
{
    public class HomeController : Controller
    {
        private IUserService UserService;public HomeController(IUserService userService)
        {
            this.UserService = userService;   //使用构造函数注入
        }

        public ActionResult Index()
        {
            string str = UserService.Hello();
            return Content(str);
        }

    }
}

这样就完成了一个最简单的mvc demo。

 

别的如使用配置文件、使用其他方法注入等详细操作,可以参考这篇博文:https://www.cnblogs.com/qqlin/archive/2012/10/18/2720828.html

unity官方文档:https://msdn.microsoft.com/en-us/library/ff649564.aspx

 

posted @ 2018-02-13 18:11 axel10 阅读(...) 评论(...) 编辑 收藏