2017-03-08 64 views
-1

我们正在使用具有问题方法的第三方装配。有什么方法可以提醒我们的开发人员不应该使用该方法,最好是在编译时,但运行时也可以。类似于Obsolete属性,但是用于其他程序集。我不能重写该方法,因为它不是虚拟的。防止在其他装配中使用方法

+0

@HimBromBeere他要求一种方法来标记他无法访问的第三方程序中过时的方法。我没有办法做到这一点,我知道。 – InBetween

+1

然后它可能会在这里回答:http://stackoverflow.com/questions/8316869/add-an-attribute-to-another-assemblys-class – HimBromBeere

回答

0

我可以看到这是可能的唯一方法是将API包装在您自己的程序集中,并让开发人员使用您的程序集而不是提供的程序集。

using MyAPI; 

public class MyWrapper 
{ 
    private MyAPI _api; 

    public MyWrapper() 
    { 
     _api = new MyAPI(); //Especially if you want to do some inits 
    } 

    public void APIMethod() 
    { 
     _api.APIMethod(); 
    } 
} 

我使用同样的方法名称,它可以让你的开发人员只需用新的类替换对象的实例化,甚至更多厚脸皮,调用类的同样的事情,更改命名空间。

然后,您可以省略违规方法或将其标记为过时。

您甚至可以使用T4模板为您生成代码,以便在API更改时重新生成代码。如果您使用反射,你甚至可以不写T4 ...

有关T4 n更多信息 - https://msdn.microsoft.com/en-us/library/dd820614.aspx

希望这是有益的。

+0

如果我包装,我只会在另一个问题交易。如果我创建了一个继承(不包装)该方法的类,然后映射该方法的类,会出现什么问题。这太有问题了吗? – BSalita

+0

某种类型的转发帮助,如果存在? – BSalita

+0

@BSalita不确定你的意思是交换另一个问题......你可以通过这样做来达到你想要的目的,如果你使用反射和代码生成,你只需要做一次。你不能重写,因为你指出你想隐藏的方法不是虚拟的,所以你恐怕没有运气。 – Rendition