Dapper

前一段作一個技術分享關於dapper的,如今再總結一下,也好長時間沒有更新博客了……,用到的東西 Dapper、AutoFac 、AutoMapper、FluentValidation;sql

下面說一下Dapper的優勢:數據庫

Dapper是一個輕型的開源ORM類,代碼就一個SqlMapper.cs文件,編譯後就40多K的一個很小的Dll.架構

Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的數據庫,固然若是你知道原理也可讓它支持Mongo dbapp

Dapper的r支持多表並聯的對象。支持一對多 多對多的關係。而且沒侵入性,想用就用,不想用就不用。無XML無屬性。代碼之前怎麼寫如今還怎麼寫。ide

Dapper原理經過Emit反射IDataReader的序列隊列,來快速的獲得和產生對象。性能提高了不少;(比採用常規的反射)函數

Dapper支持net2.0,3.0,3.5,4.0。不過就是要配置下。若是不知道如何配置查看我博客裏的在2.0下使用3.5就能夠了。性能

語法十分簡單。而且無須遷就數據庫的設計。ui

 官網上給的AutoMapper解釋,我翻譯了一下:spa

AutoMapper is a simple little library built to solve a deceptively complex problem - getting rid of code that mapped one object to another. 翻譯

AutoMapper 是代碼的一個簡單的小庫創建解決看似複雜的問題-擺脫映射到另外一個對象。

  官網上給的Autofac 解釋,我又翻譯了一下:

Autofac is an addictive IoC container for Microsoft .NET 4.5, Silverlight 5, Windows Store apps, and Windows Phone 8 apps. It manages the dependencies between classes so that applications stay easy to change as they grow in size and complexity. This is achieved by treating regular .NET classes as components.

Autofac 是入迷的 IoC 容器爲 Microsoft.NET 4.五、 Silverlight 五、 Windows 應用商店應用程序,Windows Phone 8 應用程序。它管理類之間的依賴關係,以便應用程序保持容易改變,由於他們都生長在規模和複雜性。這被經過按期的.NET 類看成組件。

FluentValidation是與ASP.NET DataAnnotataion Attribute驗證明體不一樣的數據驗證組件,提供了將實體與驗證分離開來的驗證方式,同時FluentValidation還提供了表達式鏈式語法。

爲何用FV不用屬性註解的方式,只是想把Model和驗證分開,作到解耦。

 依賴注入的方法有屬性注入、構造函數注入、接口注入,具體依賴注入是什麼,最後我會把技術分享的PPT加到附件裏面,你們能夠詳細的看一下;

在Global裏面註冊AutoFac

public static void  CoreAutoFacInit()
        {
            #region Autofac 注入依賴
            var builder = new ContainerBuilder();
            SetupResolveRules(builder);
            builder.RegisterControllers(Assembly.GetExecutingAssembly()).PropertiesAutowired();

            //註冊Filter過濾器
            //builder.RegisterFilterProvider();
           
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
         
            #endregion 
       
            // Set up the FluentValidation provider factory and add it as a Model validator
            //var factory = new FluentValidatorFactory();
            //ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(factory));
            FluentValidationModelValidatorProvider.Configure(provider =>
            {
                provider.ValidatorFactory = new FluentValidatorFactory();
                provider.AddImplicitRequiredValidator = false;

                provider.Add(typeof(UniqueEmailValidator), (metadata, context, description, validator) => new UniqueEmailPropertyValidator(metadata, context, description, validator));
            });
            DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
            ValidatorOptions.CascadeMode = CascadeMode.StopOnFirstFailure;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="builder"></param>
        private static void SetupResolveRules(ContainerBuilder builder)
        {
            var assemblyRepository = Assembly.Load("GkmDapper.Repository");
            var assemblyBLL = Assembly.Load("GkmDapper.BLL");
            builder.RegisterAssemblyTypes(assemblyRepository).Where(type => type.Name.EndsWith("Repository") && type.Namespace.Equals("GkmDapper.Repository.SqlServerRepository"))
                .AsImplementedInterfaces().SingleInstance();
            builder.RegisterAssemblyTypes(assemblyBLL).Where(type => type.Name.EndsWith("BLL") && type.Namespace.Equals("GkmDapper.BLL.SqlServerBLL"))
                .AsImplementedInterfaces().SingleInstance();

            //將自定義FluentValidate加入IOC容器(程序集掃描)
            AssemblyScanner.FindValidatorsInAssemblyContaining<CustomerValidator>().ForEach(x => builder.RegisterType(x.ValidatorType)
                .As(x.InterfaceType).SingleInstance());
        }

一樣AutoMapper也須要註冊

 public static void RegisterMaps()
        {
            AutoMapper.Mapper.Initialize(config =>
            {
                config.CreateMap<CustomerViewModel, Customer>();
            });
        }

  

 這是一篇未寫完的博客,仍是發表了吧。若是誰對Dapper+automapper+FluentValidation這套架構感興趣的話,能夠聯繫我,技術轉型,再也不更新關於.NET的東西。

相關文章
相關標籤/搜索