SimpleInjector的使用

SimpleInjector的使用    

  国庆大假,但是,小弟依然学习,前天去看了房交会,尼玛,吓屎宝宝了,还是安静的坐在公司里巧代码比较合适;

  the usage of injector consists of four to six steps;

   1.create a new container

   2.configure the container(register)

   3.[optionally] verify the container

   4.store the container for use by the application

   5.retrieve instances from the container(resolve)

   6.[optionally] dispose the container when the application ends;

usage 1:(Getting an object by a specified type;

using SimpleInjector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public interface IUser
    {
        void show();
    }

    public class User : IUser
    {
        public void show()
        {
            Console.WriteLine("show instance...国庆敲代码!");
        }
    }

    class Program
    {

        static void Injector()
        {
            var container = new Container();
            container.Register<IUser, User>(); //这里完成我们测注册
            var repository = container.GetInstance<IUser>();
            repository.show();

        }
        static void Main(string[] args)
        {

            Injector();
            Console.ReadLine();
        }
    }
}

 

 接下来是我们MVC中的实例

 首先在集成MVC的时候,记得添加这个东东: Install-Package SimpleInjector.Integration.Web.Mvc

 接口

 public interface IFuck
    {
        //这里是属性;
       int a { get; set; }

        string show(string name);

    }

实现类

public class Fuck: Service.IFuck
    {

        public Fuck()
        {
            a = DateTime.Now.Millisecond;
        }
        public int a { get; set; }
        public string show(string name)
        {
            return "fuck " + name+"  "+a;
        }
    }

然后在global中注册;

using SimpleInjector;
using SimpleInjector.Integration.Web.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using WebApplication3.Service;

namespace WebApplication3
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            //ioc的注册主要是下面的这一坨代码地呀
            var container = new Container();
            container.Register<IFuck, ServiceImple.Fuck>(Lifestyle.Transient);
            container.Verify();
            DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));

        }
    }
}

最后再我们controller中使用滴呀;

  public class UserController : Controller
    {
        private  readonly Service.IFuck _ifuck;
        public UserController(Service.IFuck ifuck)
        {
            _ifuck = ifuck;  //然后这里就是我们基本的
        }
        public ActionResult Test()
        {
            ViewBag.value = _ifuck.show(" 房地产开发商 ");
            return View();
        }
    }

结果:

 

 接下来是我们API中的实例

 首先你要添加这个东西;

 SimpleInjector.Integration.WebApi

 我这里就将就建立一个API的项目

 添加路由;

 public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

    }

 global中注册

 

  GlobalConfiguration.Configure(App_Start.WebApiConfig.Register);  // 注册 api 路由 必须写在mvc 路由注册之前否则会找不到。

接着就是我们的ioc 注册的啦;

 

 

 

 总结:

 算了,还是看官网的教程吧,这文章写的太乱了;

这里我们总结了三种类型的IOC:返回实例,mvc,webapi

然后这个只是一个入门,在实际的大项目开发中,还有....

因为,没发现,注册的时候每次都要手动的去添加接口和服务吗?这样在大型团队开发中是很麻烦,

那么解决的方法就是:DLL,

下期节目我们再做解答;

 

 

 

  

 

 

  

posted @ 2016-10-05 16:38  咕-咚  阅读(1855)  评论(1编辑  收藏  举报