我有通用方法:
private ILogger _logger; //get logger something else.
public T GetService<T>(ServiceType type)
{
//how to return _logger?
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能返回T?例如,我有 ILogger:
var logger=GetService<ILogger>(log);
Run Code Online (Sandbox Code Playgroud)
如何实现 GetService 方法?谢谢!
PS 是的,我尝试从 GetService 方法中获取一种或多种类型。例如:Logger,其他一些基础设施类。我知道,ServiceLocator 不是正确的选择(它在很多地方使用),但以我的方式(GetService 将在一个地方使用:为我的插件获取基础设施)我希望它是正常的。
尝试这个:
private ILogger _logger; //get logger something else.
public T GetService<T>(ServiceType type)
{
// codes here...
return (T)(object) _logger;
}
Run Code Online (Sandbox Code Playgroud)
听起来您正在尝试基于类型创建某种工厂方法。也许这可能会有所帮助:
public class Factory
{
private ILogger _logger; //get logger something else.
public Factory()
{
_factories = new Dictionary<Type, Func<Type, object>>()
{
{ typeof(ILogger), t => _logger },
};
}
private Dictionary<Type, Func<Type, object>> _factories;
public T GetService<T>()
{
var t = typeof(T);
return (T)_factories[t].Invoke(t);
}
}
Run Code Online (Sandbox Code Playgroud)