在一个泛型类我要创建同一类型的新对象:通用实现,但是构造函数的参数取决于具体的类
public abstract class ViewModel<TPrimaryModel>
{
public void DoSomething()
{
...
ViewModel<TPrimaryModel> newViewModel = new TPrimaryModel(someArguments);
}
}
这样做是不是C#支持。所以,我决定引进CreateInstance
- 方法:
public abstract class ViewModel<TPrimaryModel>
{
public void DoSomething()
{
...
ViewModel<TPrimaryModel> newViewModel = CreateInstance(someArguments);
}
protected abstract ViewModel<TPrimaryModel> CreateInstance(Object someArguments);
}
public class UserViewModel : ViewModel<User>
{
public UserViewModel(Object someArguments)
{
...
}
protected override ViewModel<TPrimaryModel> CreateInstance(Object someArguments)
{
return new UserViewModel(someArguments);
}
}
具有传递(一些Service
- 班)的参数是类变量。 不幸的是一些ViewModel
s需要更多的服务,然后其他人。 例子: ViewModelA viewModelA = new ViewModelA(serviceA, 5, "ViewModelA");
ViewModelB viewModelB = new ViewModelB(serviceB, serviceA, 6, "ViewModelB");
我不知道什么是走正道。封装对象创建的参数?工厂模式?还是应该避免在这种情况下继承并坚持构图?
我总是可以通过“所有”服务。或者提供一个可以访问所有服务的类。但我想这些都是坏主意。
“DoSomething”的意思是从哪里获得参数?当然,这本身就有问题......如果你能更多地解释信息流动的话,这将会有所帮助。 –
是否可以创建DoSomething()抽象,然后将其功能划分为受保护的方法? –
@JonSkeet它只是传递类变量,据我所知。所以这不应该是问题。 – mosquito87