您的位置:新葡亰496net > 奥门新萄京娱乐场 > Autofac信任注入框架,用法总计

Autofac信任注入框架,用法总计

发布时间:2019-11-30 06:12编辑:奥门新萄京娱乐场浏览(182)

    autofac官网:

    这里的unity指的是达成依赖注入的unity并不是娱乐引擎。

    意气风发、开垦景况

    1、开荒遭受: Visual Studio 二零一一

    2、数据库:Sql Server 2012

    3、代码管理:TFS(微软无需付费提供的卡塔尔国

    表明:VS二零一一与vs二零一一以为变化超小,作者下载的是Pro版,数据库为vs二零一三自带的的sqlserver数据库。代码管理采纳的是微软无偿提供的tfs(现在叫Visual Studio Online了,免费版包含5个客商,无约束团队项目和个人代码存款和储蓄库,对私有来讲丰硕用了),笔者是时有时无各市,使用别的Computer,使用tfs的指标一是代码分享;二是做个备份。

    WCF迅速搭建德姆o

    ps:本Demo只是亲自去做如何飞速创立WCF

    明日和谐搭了生机勃勃套基于三层的依附注入mvc web api 的依赖注入框架,在那总括下相关铺排

    本来项目完成信任注入用的是spring.net,不过spring.net已经十分久没人保养了,所以微软官方推出的Unity成为了代表spring.net的精品候选之少年老成。

    二、使用的本事

    新葡亰496net 1

    前4项为创设项目标暗许增多的,对Easyui这么些是否使用本人一向没想好,有的时候候认为作为网址项目,非管理软件能不用依然尽量不用啊。

    说下mvc5啊,看介绍mvc5跟MVC4转移一点都不大。

    1、One ASP.NET。本条是asp.net的新特征,不应是MVC的,差不离意思是足以把Web Forms,MVC,Web API等勾兑在一个品种中,mvc中能够加多webforms的东西,能够加多api,别的门类也这么。

    2、ASP.NET Identity。全新的会员身分系统(membership),一个是依据OWIN,另二个是接纳Entity Framework Code First來管理,能够团结增添顾客字段等。

    3、Bootstrap。做分界面包车型地铁好咚咚。缺憾笔者不懂,适逢其会本次学习一下。

    1.第后生可畏形成IBLL、BLL、Model层的搭建,由于数量访谈层不是非同通常,WCF搭建才是生死攸关内容,所以Bend姆o略去数据访谈层。

    新建BLL类库项目,增多UserInfo类如下:

     

     1 namespace Model
     2 {
     3     [DataContract]
     4     public class UserInfo
     5     {
     6         [DataMember]
     7         public int Id { get; set; }
     8         [DataMember]
     9         public string Name { get; set; }
    10     }
    11 }
    

     

    当实体对象作为网络传输时需求被种类化,所以注意以下几点:

      1.不给别的标识将会做XML映射,全数国有属性/字段都会被连串化

      2.[Serializable]标志会将享有可读写字段种类化

      3.[DataContract]和[DataMember]生龙活虎道使用来标识被体系化的字段

    接下去,新建IBLL类库项目,增添IUserInfoService类作为接口左券,代码如下:

    1 namespace IBLL
    2 {
    3     [ServiceContract]
    4     public interface IUserInfoService
    5     {
    6         [OperationContract]
    7         UserInfo GetUser(int id);
    8     }
    9 }
    

    ps:供给操作的办法分明要记得打上标签!

    黄金年代致,新建BLL类库项目,增加UserInfoService类,代码如下(只为测验WCF搭建):

     1 namespace BLL
     2 {
     3     public class UserInfoService:IUserInfoService
     4     {
     5         public UserInfo GetUser(int id)
     6         {
     7             return new UserInfo() { Id = id, Name = "test" };
     8         }
     9     }
    10 }
    

     

    1.装置应用程序的.net Framework版本为 4.5

    autofac作为叁个火热ioc框架,照旧有打探一下的不可缺少的。这里用多个小案例来归纳说说autofac在.net framework调整台应用程序和asp.net mvc5 项目中的使用。

    简轻易单调节台demo:

    三、品种构造

     

    新葡亰496net 2

     

    •  Web项目:与客户进行互动的MVC项目。MVC中的试图和调控器部分,并适度定义视图与调整器间举办相互作用的精算模型(以ViewModel为后缀)。富含三个区域Member(顾客区域),Manage(管理区域)。
    • Models项目:模型类,平日是与数据库或项目里面相互数据的的类(不包括计划模型)。
    • Common项目:放置一些集体措施,像加密,转变,生成验证码等。
    • IDAL项目:数据访谈层接口,定义通过EF与数据库进行操作方法。
    • DAL项目:数据访谈层,世袭自IDAL并得以完毕其定义的办法。
    • IBLL项目:业务逻辑层接口,定义通过调用数据访谈层并开展管理为Web项目提供服务的措施。
    • BLL项目:业务逻辑层,世襲自IBLL并落到实处其定义的方法。

    2.搭建WCFHost(宿主)

    新建二个调控台项目,在布署文件app.config中的configuration节点下增添:

    <system.serviceModel>
        <services>
          <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8000/"/>
              </baseAddresses>
            </host>
            <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint>
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="behaviorConfiguration">
              <serviceMetadata httpGetEnabled="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    

    留心以下几点:

      1.因为是本土测量检验,所以baseAddress填写了本土之处,那个能够依照实际修改。

       2.service节点的name属性要更正为BLL层具体服务类的“命名空间 类名”。

      3.endpoint节点的contract属性要校勘为IBLL层具体服务类接口的“命名空间 接口名”。

    主程序代码中加多:

    1 using (ServiceHost host = new ServiceHost(typeof(UserInfoService)))
    2             {
    3                 host.Open();
    4                 Console.WriteLine("服务已启动,按任意键中止...");
    5                 Console.ReadKey();
    6                 host.Close();
    7             }
    

    ps:typeof(卡塔尔中换到要调用的服务类。

    在项目上右键接受“在文件能源微型机中开采文件夹”,找到可执路程序WCFService.exe,右键选择“以管理员身份运行”。

     

    2.通过Nuget 安装autofac包

    先从调节台应用程序最早。

     

    后生可畏、基本框架

    要么先说下中央框架吧,一下子搞了7个种类望着挺乱的,小编的驾驭是M、V、C 3者中,M是数据载体,V是客商要看的精算,C主尽管和煦整制与顾客分界面相关的操作,而数据的管理,数据库的的操作交给DAL、BLL来做。整个思路正是:View是客商观望的界面;Controller担任和睦顾客操作的事物,供给或拍卖多少时找专门的学问逻辑层;业务逻辑层须求拜见数据库时又找数据访问层;数据访谈层通过EF与Sql Server举行互相;各层之间数据人机联作的媒人正是Model。

    此地IBLL和IDAL是接口,功效都在BLL和DAL中达成了,看似有个别多余,其实依旧很有用项。二个是接口只兑现格局定义看起来不言而喻;另二个是大器晚成旦接口不改变,不管完成的代码怎么写项目间的调用都不会变。

    新葡亰496net 3

    3.最后一步,就是来测量检验大家的WCF服务是或不是搭建成功了,新建两个winform窗体项目WCFClient,在等级次序右键,加多服务援引,在地方栏输入   新葡亰496net,  (配置文件中填入的baseAddress卡塔尔国。在该程序中调用刚刚搭建好的WCF服务:

    1 UserInfoServiceClient client = new UserInfoServiceClient();
    2 UserInfo u =  client.GetUser(5);
    3 MessageBox.Show(u.Id   "-"   u.Name);
    

    运作后,弹出音信,表示WCF服务搭建设成功!

     

    Install-Package Autofac

    首先nuget安装autofac,新建IDemo接口

    第后生可畏新建调控台应用,nuget寻找unity并设置。

    二、项目确立

    1、建立Web项目。

    选择 模板->Visual C#->Web->ASP.NET Web应用程序。

    这里与vs贰零壹叁中有叁个综上说述地转变,webform、mvc 、api等做的八个模板中了。如图

    新葡亰496net 4

    如若想像从前雷同付出如何是好? 点开web-> Visual Studio 贰零壹贰是否收放自如的感到又赶回了。

    新葡亰496net 5

    我们这里依旧接收Web->ASP.NET Web应用程序 鲜明。

    新葡亰496net 6

    此地选取MVC(能够选用增加webform、api的引用,把原先的二种类型杂烩到一齐。这里只选MVC),身份验证选个人顾客账户,那样会加多最新的ASP.NET Identity的使用代码(其实选什么不在意,这里不许备接收ASP.NET Identity,顾客管理依然要好来做,选上它是想看看微软的代码是怎么写的)。

    2、建立其余6个类别

    在建设方案上点右键->加多->新建项目

    项目项目选用->Visual C# –>Windows->类库。

    新葡亰496net 7

    这些起家其余三个类别。

    完工后框架如下:

    新葡亰496net 8

    Autofac信任注入框架,用法总计。Install-Package Autofac.WebApi

    namespace AutuFacDemo
    {
        interface IDemo
        {
            string Hello();
        }
    }
    
    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");
            }
        }
    }
    

    三、项目里面包车型地铁引用

    品类确立好之后要加多项目间的援用。

    在web项指标引用上点右键,选用建设方案->项目 增加Ninesky.Models、 Ninesky.Common、 Ninesky.IBLL、 Ninesky.BLL的援用

    依次:IDAL添加Ninesky.Models引用

    DAL添加Ninesky.Modles、 Ninesky.IDAL引用

    IBLL添加Ninesky.Modles引用

    BLL添加Ninesky.Models、 Ninesky.IDAL、 Ninesky.DAL、 Ninesky.IBLL引用

    除此以外DAL Models要在Nuget上加多EntityFramework的引用。方法是连串引用上点右键选择管理NUGET程序包。在弹出窗口中选 联机->nuget.org->EntityFramework  然后点安装就可自动完结安装。

    新葡亰496net 9

    3.引用如下命名空间

    新建Demo类实现IDemo接口:

     

    四、总结

    到此框架算是搭完了。这里web项目代表了mvc中的v和c。modle项目表示了m。common项目希图写公共艺术。其余4个档期的顺序算是三层构造中的间数据数据访谈层和职业逻辑层,别的如故用了面向接口。后一次算是能够写代码了。

    using Autofac;
    using Autofac.Integration.WebApi;
    using Autofac.Integration.Mvc;
    using System.Web.Mvc;
    
    namespace AutuFacDemo
    {
        public class Demo :IDemo
        {
            public string Hello()
            {
                return "hello";
            }
        }
    }
    

    在asp.net mvc里使用unity:

    4.再遵照如下代码配置Autofac(分别搭建DAL、BLL、IDAL、IBLL)

    Program.cs:

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

    public static void Register()
    {
    var builder = new ContainerBuilder();
    HttpConfiguration configuration = GlobalConfiguration.Configuration;
    var assemblyList = AppDomain.CurrentDomain.GetAssemblies();

    using Autofac;
    using System;
    
    namespace AutuFacDemo
    {
        class Program
        {
            private static IContainer Container { set; get; }
    
            static void Main(string[] args)
            {
                var builder = new ContainerBuilder();
                builder.RegisterType<Demo>().As<IDemo>();
                Container = builder.Build();
    
                using (var scope = Container.BeginLifetimeScope())
                {
                    var demo = scope.Resolve<IDemo>();
                    Console.WriteLine(demo.Hello());
                    Console.ReadKey();
                }
            }
        }
    }
    

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

    builder.RegisterWebApiFilterProvider(configuration);

    如此那般就到位了四个最简便的调整台德姆o。

    新葡亰496net 10

    //var iServices = Assembly.Load("IOC.IBLL");
    //var services = Assembly.Load("IOC.BLL");
    //var iRepository = Assembly.Load("IOC.IDAL");
    //var repository = Assembly.Load("IOC.DAL");

     

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

    //builder.RegisterAssemblyTypes(iServices, services)
    // .Where(t => t.Name.EndsWith("Service"))
    // .AsImplementedInterfaces();

    今天最早使用mvc5案例。

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

    //var test = builder.RegisterAssemblyTypes(iRepository, repository)
    // .Where(t => t.Name.EndsWith("Dal"))
    // .AsImplementedInterfaces();

    nuget安装Autofac.Mvc5

    4:在Global.asax.cs里填充配置。示譬如下:

    builder.RegisterAssemblyTypes(assemblyList)
    .Where(t => t.Name.EndsWith("Service") || t.Name.EndsWith("Dal"))
    .AsImplementedInterfaces();

    长久以来施工方案内新建IBLL和BLL类库,IBLL贮存I德姆o.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;
            }
        }
    }
    

    builder.RegisterControllers(Assembly.GetExecutingAssembly(卡塔尔卡塔尔(英语:State of Qatar).PropertiesAutowired(卡塔尔国; //注册全数controller
    builder.RegisterApiControllers(Assembly.GetExecutingAssembly(卡塔尔(قطر‎卡塔尔国.PropertiesAutowired(卡塔尔; //注册全体apicontroller

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

     

    var container = builder.Build();

    BLL存放Demo.cs

    5、在Control中拿走UserService类并应用

    configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);//注册api容器
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//注册mvc容器
    }

    using IBLL;
    
    namespace BLL
    {
        public class Demo :IDemo
        {
            public string Hello()
            {
                return "hello";
            }
        }
    }
    
    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);
            }
    
        }
    }
    

    5.在Application_Start里调用 AutofacConfig.Register();

    Global.asax.cs配置autofac:

    这么就成功了二个最简易的mvc demo。

    6.然后在每大器晚成层采取结构函数信赖注入情势。

    using Autofac;
    using Autofac.Integration.Mvc;
    using BLL;
    using IBLL;
    using System.Web.Http;
    using System.Web.Mvc;
    using System.Web.Optimization;
    using System.Web.Routing;
    
    namespace WebDemo
    {
        public class WebApiApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure(WebApiConfig.Register);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
    
                var builder = new ContainerBuilder();
                builder.RegisterControllers(typeof(WebApiApplication).Assembly);
    
                builder.RegisterType<Demo>().As<IDemo>();
    
                var container = builder.Build();
                DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
            }
        }
    }
    

     

     

    调整器配置德姆o方法:

    其他如运用陈设文件、使用其余格局注入等详细操作,能够参见那篇博文:

    using IBLL;
    using System.Web.Mvc;
    
    namespace WebDemo.Controllers
    {
        public class HomeController : Controller
        {
    
            private IDemo _demo;
    
            public HomeController(IDemo demo)
            {
                this._demo = demo;
            }
    
            public ActionResult Index()
            {
                ViewBag.Title = "Home Page";
    
                return View();
            }
    
            public ActionResult Demo()
            {
                string hello = _demo.Hello();
                return Content(hello);
            }
        }
    }
    

    unity官方文书档案:

    运转后拜谒德姆o形式,就可以见到效果。

     

     

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:Autofac信任注入框架,用法总计

    关键词: