`

插件编程的基础,依赖注入

阅读更多
今天同事说有个上海的同学搞C#开发,说了很多名词很厉害,他都没听说过。编程不外乎就那点东西,而且那些挺起来很牛的技术其实就是一个点,一两句话而已,开发过程还是靠的基础知识,基础不好那些高技术什么也没有用的。
其中就有一个名词叫依赖注入的,没什么神奇的,就是一个类接口啊抽象类啊的东西,约定好对应关系,事先做好事先,用的时候转化一下类型,依赖注入就算完了,下来还是普通的知识了:
 /// <summary>
        /// 根据配置文件,返回 OrderSynchronous 或着 OrderSynchronous 类实例
        /// </summary>
        /// <returns>IOrderStrategy 类型</returns>
        private static PetShop.IBLLStrategy.IOrderStrategy LoadInsertStrategy() {

            // 获取 Web.config 文件中 OrderStrategyAssembly 的配置信息
            string path = ConfigurationManager.AppSettings["OrderStrategyAssembly"];
            string className = ConfigurationManager.AppSettings["OrderStrategyClass"];

            // 利用配置信息,创建相关类实例
            return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);
        }



其中
  return (PetShop.IBLLStrategy.IOrderStrategy)Assembly.Load(path).CreateInstance(className);   


不就是用PetShop.IBLLStrategy.IOrderStrategy接口来强制转化成一个类,
剩下的不是普通的面向对象编程吗。
依赖注入就是这个方法的使用Assembly.Load


不过加载程序集有三个方法,看看他们的区别 C#反射之Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom

一.Load方法
1.Load(AssemblyName) 在给定程序集的 AssemblyName 的情况下,加载程序集。
2.Load(AssemblyString) 通过给定程序集的长格式名称加载程序集。
总结: 使用Load方法加载程序集,特别是强命名程序集,能在程序集上应用安全和部署策略,一般情况下都应该优先使用这个方法。
二.LoadFrom (已知程序集的文件名或路径,加载程序集。)
MSDN: LoadFrom 方法具有以下缺点。请考虑改用 Load。
1.如果已加载一个具有相同标识的程序集,则即使指定了不同的路径,LoadFrom 仍返回已加载的程序集。
2.如果用 LoadFrom 加载一个程序集,随后加载上下文中的一个程序集尝试加载具有相同显示名称的程序集,则加载尝试将失败。对程序集进行反序列化时,可能发生这种情况。

总结: LoadFrom只能用于加载不同标识的程序集, 也就是唯一的程序集, 不能用于加载标识相同但路径不同的程序集。

从例子1,2,3的源代码中可以看出来, 三者归根结都是调用RuntimeAssembly.InternalLoadAssemblyName()方法的.



三.LoadFile (加载指定路径上的程序集文件的内容。)

总结: 这个方法是从指定的文件来加载程序集,它是调用外部的API实现的加载方式,和上面Load,LoadFrom方法的不同之处是这个方法不会加载此程序集引用的其他程序集,也就是不会加载程序的依赖项。



0
3
分享到:
评论

相关推荐

    rsut 依赖注入

    标题“rsut 依赖注入”以及描述“英文版,描述rust 解耦的几种方式”和标签“rust 依赖注入”指向的主题是关于Rust编程语言中解耦概念和依赖注入(DI)的探讨。Rust是一门注重安全和性能的系统编程语言,它的静态...

    struts hibernate spring 集成时使用依赖注入的方式的秘籍

    它们各自在Web应用程序的不同层面上发挥作用:Struts处理MVC模式中的Controller部分,Hibernate负责数据持久化,而Spring则提供了全面的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    用于Swift的声明式,易于使用和安全的依赖注入框架(iOS / macOS / Linux).zip

    Swift依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许在对象之间解耦,使得代码更易于测试、维护和扩展。...同时,参与开源项目,理解其源码实现,对于深入学习依赖注入和Swift编程都有很大的帮助。

    一个插件式编程例子,用C#写的,大家参考

    4. **依赖注入(Dependency Injection)**:为了使插件能够访问主程序的服务或资源,可以使用依赖注入来传递必要的上下文。C#中有多种依赖注入框架,如 Autofac、Unity 和 Ninject 等,可以简化这一过程。 5. **...

    C+Sharp+插件式编程

    6. **Mef(Managed Extensibility Framework)和Unity**:这两个是微软提供的DI(Dependency Injection)和IoC(Inversion of Control)容器,可以用来管理插件的生命周期,方便插件的注册、依赖注入和解耦。...

    c#一个插件编程的案例

    为了增强灵活性,还可以考虑使用依赖注入(Dependency Injection)框架,如 Autofac 或 Unity,来管理插件的生命周期。这样,插件可以方便地声明它们的依赖,主程序则负责提供这些依赖。这样不仅可以简化代码,还能...

    动态依赖注入框架_HK2_hk2-fork_下载.zip

    这个"动态依赖注入框架_HK2_hk2-fork_下载.zip"文件很可能包含了HK2框架的一个 fork 版本,即在原始项目的基础上进行了一些修改或增强。 HK2 的主要目标是提供一种灵活的方式来管理对象之间的依赖关系,使得代码...

    Atom-reactive-di,支持流类型接口的可扩展层次依赖注入容器.zip

    总之,Atom-reactive-di是一个强大的工具,它通过支持流类型接口的层次依赖注入,增强了Atom编辑器的扩展性和响应性,使得开发者能更高效地构建和维护 Atom 插件和组件。通过深入理解并应用这个库,你可以在开发Atom...

    swift-Typhoon-适用于iOS和OSX的强大依赖注入Objective-C和Swift

    Swift开发中的Typhoon框架是一个强大的依赖注入(Dependency Injection,简称DI)工具,它适用于iOS和OSX平台,支持Objective-C和Swift两种编程语言。依赖注入是一种设计模式,它可以帮助开发者解耦应用程序组件,...

    控制反转(IoC)与依赖注入(DI)1

    【控制反转(IoC)与依赖注入(DI)详解】 控制反转(Inversion of Control,简称IoC)是面向对象编程领域的一种设计原则,旨在降低软件组件间的耦合度。在传统的程序设计中,对象A如果依赖于对象B,那么对象A在...

    wallaroo:C ++依赖注入-开源

    Wallaroo是一个专为C++设计的开源依赖注入(Dependency Injection,简称DI)库。依赖注入是一种软件设计模式,它允许程序在运行时动态地将依赖关系注入到对象中,而不是由对象自己创建或查找依赖。这种模式有助于...

    注入功能工程

    注入的核心概念是依赖注入(Dependency Injection,简称DI),它是一种设计模式,用于减少代码之间的耦合,提高代码的可重用性和可测试性。在Android中,通常有两种主要的注入方式:手动注入和依赖注入框架。 1. ...

    Spring-Boot插件式开发框架,为动态扩展系统而生的插件开发框架

    - **实现业务逻辑**:在插件项目中编写具体业务代码,实现插件接口,并配置好SpringBoot的自动配置和依赖注入。 - **插件打包**:根据框架要求打包插件,通常可以是JAR、WAR或其他格式,确保包含所有运行时依赖。 ...

    C# 插件结构设计 C# 插件结构设计

    综上所述,C#插件架构涉及多个层面,包括接口设计、插件加载、依赖注入、安全性和隔离,以及版本兼容性等。理解和掌握这些知识点对于构建灵活且可扩展的应用程序框架至关重要。通过运用这些技术,开发者可以创建出...

    Android Studio 生成 Xutils3 注入的插件

    在Xutils3中,注解注入是一种常见的编程方式,它可以将代码中的依赖自动注入,减少手动设置对象的繁琐工作。例如,使用`@InjectView`注解可以自动绑定XML布局中的控件,`@SqlInfo`可以标记SQL信息等。 这个插件的...

    React 源码中的依赖注入方法

    在本文中,我们将探讨React源码中的依赖注入方法,这是一种重要的设计模式,有助于提升代码的可测试性和可维护性。依赖注入(Dependency Injection,DI)是控制反转(Inversion of Control,IoC)的一种实现,它的...

    【ASP.NET编程知识】在.net core中实现字段和属性注入的示例代码.docx

    【ASP.NET编程知识】在.NET Core中实现字段和属性注入是一种常见的依赖注入(Dependency Injection,简称DI)方式,它能够帮助开发者创建松耦合、可测试且易于维护的代码。在.NET Core中,内置的依赖注入容器...

    C#插件框架示例

    3. **依赖注入**:为了使插件能够访问主程序的服务或资源,可能会使用依赖注入(Dependency Injection)。C#支持构造函数注入、属性注入和方法注入等多种方式。 4. **插件注册与管理**:主程序通常有一个插件管理器...

    dii:Yii 1的依赖注入容器插件

    Yii 1的依赖注入容器插件 该插件增加了在使用对象实例及其依赖项之前对其进行配置的功能,并将其存储到容器类中以便于访问。 它使用简洁灵活的 DI框架,该框架是“ Google Guice”样式PHP依赖项注入框架。 Ray.Di...

Global site tag (gtag.js) - Google Analytics