尽管这是一个普遍的问题,但它也特定于我当前遇到的问题。我目前在解决方案中指定了一个接口,称为
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
该接口经常在整个程序中使用,因此我可以轻松访问所需的对象。但是,在程序一部分的较低级别,我需要访问另一个将使用IAreaContext并对其执行一些操作的类。因此,我创建了另一个工厂接口来执行此创建操作:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
我有一个实现IContextProvider的类,并使用NinJect注入。我遇到的问题是,我需要使用此IEventContextFactory的区域只能访问IContextProvider,并且本身使用另一个需要该新接口的类。我不想在低级实例化IEventContextFactory的此实现,而是希望始终使用IEventContextFactory接口。但是我也不想只通过构造函数注入另一个参数,而只是将其传递给需要它的类,即
// example of problem
public class MyClass
{
public MyClass(IContextProvider context, IEventContextFactory event)
{
_context = context;
_event = event;
}
public void DoSomething()
{
// the only place _event is used in the class is to pass it through
var myClass = new MyChildClass(_event);
myClass.PerformCalculation();
}
}
所以我的主要问题是,做这样的事情(接口扩展另一个接口)是否可以接受?
public interface IContextProvider : IEventContextFactory
或者我应该考虑实现我所需要的更好的替代方法。如果我没有提供足够的信息来提出建议,请告诉我,我可以提供更多。