我註冊服務&提供一些IoC的工具(如StructreMap)如何使用一些提供者使用相同的服務?
public interface IProvider
{
void Load(int id);
}
public class Provider : IProvider
{
public void Load(int id) {...}
}
public interface IService
{
void Load(int id);
}
public class Service : IService
{
public Service(IProvider provider) { }
public void Load(int id) { provider.Load(id); }
}
現在我有另一個供應商
public class Provider2 : IProvider
{
public void Load(int id) {...}
}
我想註冊一個供應商(Provider2之間),並獲得實例來自IoC工具的Provider2服務。我能看到做到這一點的唯一方法是創建將從IService2繼承的Service2,最後一個將從IService繼承。現在我可以得到IService2類型的實例,它將啓動Provider2的提供者。
public interface IService2 : IService
{ }
public class Service2 : IService2
{
public Service2(IProvider2 provider) { }
public void Load(int id) { provider.Load(id); }
}
我的問題是:對於每個新的提供者,我需要爲服務編寫新的類,即使服務的功能應該保持不變?
不應該是'public Service2(IProvider provider)'?然後你想達到什麼目的?你是否想要兩個具有相同接口的服務只有不同的實現 - >不同的提供者? – ub1k
我想要2個具有相同實現但不同提供者實現的服務。它會接收提供者和其他時間Provider2。但是,我不會手動調用它。我想從IoC的服務 – theateist
我看不到那個問題。 否則,您必須讓第二個Service解析IProvider。每個IoC都有一個選項可以在某些基礎上以不同方式解析界面。像'YourIoc.Resolve(someParameter)' –
ub1k