欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-12 23:00:49
这里的unity指的是完成依赖注入的unity而不是游戏引擎。 原本项目完成依赖注入用的是spring.net,但是spring.net已经很久没人维护了,所以微软官方推出的Unity成为了替代spring.net的最佳候选之一。 简单控制台demo: 首先新建控制台应用,nuget搜索unity并 ......

这里的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,完成后目录如下:

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

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