是否可以将对象创建限制为特定类的方法?如何将对象创建限制到特定类的方法?
对于为例:我有一个类事务,我想限制它创建对象,以从AbstractService或IService继承任何类的方法:
允许的情景:
public class ServiceA : AbstractService (or IService)
{
public void MethodA()
{
var transaction = new Transaction();
}
public void MethodB()
{
var transaction = new Transaction();
}
}
禁止情景:
public class ServiceB
{
public void MethodA()
{
var transaction = new Transaction(); // cannot create
}
public void MethodB()
{
var transaction = new Transaction(); // cannot create
}
}
有一个访问修饰符或其他我可以安装该场景的东西?
如果'ServiceA'与'Transaction'在同一个程序集中,但是在一个单独的程序集中,而不是'ServiceB',那么你可以为'Transaction'' internal'构造函数。否则,您可以将其设置为'private'并使用反射来创建它的一个实例,并禁止其他类通过抛出异常来创建实例。我认为这是你能做的最好的事情。 –
排序回答:没有。 – Jamiec
想不到应该如何实现这个优雅的方式。一个肮脏的黑客可能确实是检查'Transaction'的构造函数中的'StackFrame'。但实际上我认为你在这里有一个错误的设计决定,但我不能断定,如果不知道你正在努力实现什么。为什么你想这样做?如果'ServiceA.MethodA()'会调用'ServiceB.MethodA'然后创建'Transaction',它会是合法的吗?或者只有来自'ServiceA'的“直接”呼叫?不管“直接”意味着编译器优化之后的意思。 –