项目的存取我添加了一个协接口到我们的项目:构建失败含协变类型
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
我创造了一些类,实现这些接口:
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
而且我可以用这个没有问题:
IPresenter<IView> presenter = new TestPresenter();
所以,一切似乎是正确的,所以我想我的C过度使用是正确的。不幸的是,我们的单元测试项目包含位于同一项目中的某些类型的私有访问器,例如协变接口,这会导致构建失败。
Could not load type 'GenericInheritanceTest.IPresenter_Impl`1' from assembly 'GenericInheritanceTest_Accessor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it declares a covariant or contravariant type parameter and is not an interface or delegate.
这里的问题究竟是什么?在我的实施中是否有失败,如何解决这个问题?不能,我们必须避免使用协变类型的访问器?是否有可能阻止为某些类型创建访问器来解决此问题?
您应该避免一般的私人访问 - 它们会导致测试和生产代码之间的耦合过于紧密。 – Grzenio 2010-09-08 12:37:50
是的,谢谢,但我在这里已经有一个已经存在的项目,它具有120k loc和私人访问器的良好用法,所以它不会只是一个指尖来重写它。 – Enyra 2010-09-08 14:02:55