通过Orchard认识的Autofac

反射Reflection

这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息。

  • 类似于早绑定与晚绑定的关系,晚绑定损耗效率,但可以提高程序的利用性和灵活性,并且能够带来设计上的便利。
  • 应用:

    • 通过反射获取类型;

      • type.GetInterface("ITest")
      • Type.GetType("System.String")
      • Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
    • 通过反射来遍历对象属性;

C#:

  Test1 test = new Test1();
  test.Id = 1;
  test.Name = "语文";
  test.Score = 87.5;
  foreach (System.Reflection.PropertyInfo pi in test.GetType().GetProperties())
  {
      Console.WriteLine(pi.Name + ":" + pi.GetValue(test, null).ToString() + "<br />");
  }

关于IOC和DI的理解

  • 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)。

    DIP:依赖倒置原则,高层模块定义接口,低层模块负责实现。

  • 控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。

    IOC:Inversion of Control 控制反转,不是什么技术,是一种设计模式,为了解耦

  • 依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。

    DI:Dependency Injection 依赖注入

  • IoC容器:依赖注入的框架,用来映射依赖,管理对象创建和生存周期(DI框架)。
    比较官方的语言:应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。ioc
    http://www.2cto.com/kf/201407/321182.html

AutoFac常用方法说明http://www.cnblogs.com/WeiGe/p/3871451.html

  1. (1)builder.RegisterType().As ():注册类型及其实例。例如下面就是注册接口IDAL的实例SqlDAL

    C#:

      ContainerBuilder builder = new ContainerBuilder();  
      builder.RegisterType<SqlDAL>().As<IDAL>();  
      IContainer container = builder.Build();  
      SqlDAL sqlDAL = (SqlDAL)container.Resolve<IDAL>();
    1. (2)IContainer.Resolve ():解析某个接口的实例。
    2. (3)builder.RegisterType().Named (string name):为一个接口注册不同的实例。

      C#:

       builder.RegisterType<SqlDAL>().Named<IDAL>("sql");  
       builder.RegisterType<OracleDAL>().Named<IDAL>("oracle");  
       IContainer container = builder.Build();  
       SqlDAL sqlDAL = (SqlDAL)container.ResolveNamed<IDAL>("sql");  
       OracleDAL oracleDAL = (OracleDAL)container.ResolveNamed<IDAL>("oracle");
      1. (4)IContainer.ResolveNamed (string name):解析某个接口的“命名实例”。
      2. (5)builder.RegisterType().Keyed (Enum enum):以枚举的方式为一个接口注册不同的实例。
      3. (6)IContainer.ResolveKeyed (Enum enum):根据枚举值解析某个接口的特定实例。
      4. (7)builder.RegisterType ().InstancePerDependency():用于控制对象的生命周期,每次加载实例时都是新建一个实例,默认就是这种方式
      5. (8)builder.RegisterType ().SingleInstance():用于控制对象的生命周期,每次加载实例时都是返回同一个实例
      6. (9)IContainer.Resolve (NamedParameter namedParameter):在解析实例T时给其赋值
        DBManager manager = container.Resolve (new NamedParameter("name", "SQL"));
      7. 通过配置的方式使用AutoFac http://developer.51cto.com/art/201407/446711_all.htm

        C#:

        static void Main(string[] args)  
        {  
            ContainerBuilder builder = new ContainerBuilder();  
            builder.RegisterType<DBManager>();  
            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));  
            using (IContainer container = builder.Build())  
            {  
                DBManager manager = container.Resolve<DBManager>();  
                manager.Add("INSERT INTO Persons VALUES ('Man', '25', 'WangW', 'Shanghai')");   
        }  

        autofac是.net一种最流行的依赖注入的框架,最终目标是为了解耦,直接切入点就是以接口编程为主导思想,杜绝类之间的耦合,以反射技术为基础,把依赖注入到相应的对象中。


        属性注入

        • 使用依赖注入容器时,大部分都是使用构造函数来注入或者是xml配置文件,也有很多支持属性注入。
        • 对于一些使用特频繁的类或者方法,很多类都会用到,那么使用属性注入会节省更多的力气,而且在设计的时候就可以提早的把该属性给定义出来。
        • http://www.cnblogs.com/n-pei/p/3417891.html
        • 通过Orchard认识的Autofac
        posted @ 2014-10-27 16:01 政政糖 阅读( ...) 评论( ...) 编辑 收藏

你可能感兴趣的:(char)