我正在尝试创建一个通用方法,其中类型是通用接口。
private void ShowView<T>(string viewName) where T : IView<Screen>
{
IRegion mainRegion = _regionManager.Regions[RegionNames.MainRegion];
T view = (T)mainRegion.GetView(viewName);
if (view == null)
{
view = _container.Resolve<T>();
mainRegion.Add(view, viewName);
}
mainRegion.Activate(view);
view.LoadData();
view.ViewModel.IsActive = true;
}
界面为IView<T> where T : Screen
。
所以我有ConcreteView : IView<ConcreteViewModel>
和ConcreteViewModel : Screen
,其中Screen是基类。当我尝试ShowView<ConcreteView>("concrete");
时,我收到一个UnknownMethod错误。
是不是因为ConcreteView使用ConcreteViewModel而不是Screen来实现它的IView实现?有没有办法重写方法以使其有效?
答案 0 :(得分:7)
IView<ConcreteViewModel>
不是IView<Screen>
而不提供接口的差异
interface IView<out T>
{
}
(以上可以从C#4.0开始)
否则,您应该能够像下面那样编写方法签名
void ShowView<T, U>(string viewName) where T : IView<U> where U : Screen
{
// code
}
并像ShowView<ConcreteView, ConcreteViewModel>("blah");