美文网首页dotNET
利用自定义类特性与反射来解耦

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

作者: czly | 来源:发表于2017-02-23 13:07 被阅读0次

    其实主要是利用类特性,来存储程序集信息,在利用反射创建实例。与将程序集信息写在配置文件里效果一样。
    首先新建特性类,继承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层与业务逻辑层解耦。

    相关文章

      网友评论

        本文标题:利用自定义类特性与反射来解耦

        本文链接:https://www.haomeiwen.com/subject/ohovwttx.html