利用自定义类特性与反射来解耦

其实主要是利用类特性,来存储程序集信息,在利用反射创建实例。与将程序集信息写在配置文件里效果一样。
首先新建特性类,继承Attribute
<pre>
public class DLLInfoAttribute:Attribute
{
public string DllName { get; set; }

    public string FullClassName { get; set; }
    
}

</pre>

我们新建一个接口,抽象业务逻辑。
<pre>
[DLLInfo(DllName = "BLL.dll", FullClassName = "BLL.ClassA")]
public interface IClassA
{
int Add();
}
</pre>

在接口上添加特性信息,DLLName是业务逻辑实例的dll文件名称,FullClassName是命名空间+类名。

然后我们新增业务逻辑类,继承接口IClassA
<pre>
namespace BLL
{
public class ClassA:IClassA
{

    public int Add()
    {
        return 0;
    }
}

}
</pre>

UI层引用IClass接口项目,DllInfo特性类项目。
调用方法如下
<pre>
private void button_Click(object sender, EventArgs e)
{
IClassA ca = (IClassA)CreateInstance(typeof(IClassA), typeof(DLLInfoAttribute));
ca.Add();
}

    private object CreateInstance(Type t, Type attri)
    {
        object[] obj = t.GetCustomAttributes(attri, true);
        DLLInfoAttribute dllInfoC = (DLLInfoAttribute)obj[0];

        System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(Application.StartupPath + "\\" + dllInfoC.DllName);

        return assembly.CreateInstance(dllInfoC.FullClassName);

    }

</pre>
这样,实现了UI层与业务逻辑层解耦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,981评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,466评论 25 708
  • 1.对于来自微信公众号的视频处理方式 大部分通过检查元素——sources——player.html——v.qq....
    In家伟阅读 2,067评论 0 1
  • 写这个文章,是因为有感而发。 过去我们中国人讲究的是尊老爱幼,原因是因为中国农业社会的家庭是大家族制,一家有老有小...
    e42c5056055c阅读 1,435评论 0 6