dotNET

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

2017-02-23  本文已影响0人  czly

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

上一篇 下一篇

猜你喜欢

热点阅读