Bu genel bir soru olmasına rağmen şu anda yaşadığım bir soruna özgüdür. Şu anda benim çözümümde belirtilen bir arayüz var
public interface IContextProvider
{
IDataContext { get; set; }
IAreaContext { get; set; }
}
Bu arayüz genellikle program boyunca kullanılır ve bu nedenle ihtiyacım olan nesnelere kolayca erişebilirim. Ancak programımın bir kısmının oldukça düşük bir düzeyinde IAreaContext kullanacak ve bazı işlemleri gerçekleştirecek başka bir sınıfa erişmem gerekiyor. Ben de bu yaratılışı yapmak için başka bir fabrika arayüzü oluşturdum:
public interface IEventContextFactory
{
IEventContext CreateEventContext(int eventId);
}
Ben uygular bir sınıf var IContextProvider ve Ninject kullanılarak enjekte edilir. Ben sorundur bu kullanmak gerekir alana o IEventContextFactory erişimi olan IContextProvider sadece ve kendisi bu yeni arayüzü gerekecektir başka sınıfını kullanır. IEventContextFactory bu uygulamayı düşük düzeyde somutlaştırmak istemiyorum ve yerine genelinde IEventContextFactory arabirimi ile çalışmak istiyorum . Bununla birlikte, sadece ihtiyaç duyan sınıfa geçmesi için yapıcılar aracılığıyla başka bir parametre enjekte etmek istemiyorum.
// 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();
}
}
Yani asıl sorum şu, bu kabul edilebilir mi, ya da böyle bir şey yapmak yaygın ya da iyi bir uygulama mı (arayüz başka bir arayüzü genişletir):
public interface IContextProvider : IEventContextFactory
veya ihtiyacım olanı başarmak için daha iyi alternatifler düşünmeli miyim? Eğer öneride bulunmak için yeterli bilgi vermediysem bana bildirin ve daha fazlasını sağlayabilirim.