如何返回T型?

Adm*_*and 3 c# generics

我有通用方法:

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 将在一个地方使用:为我的插件获取基础设施)我希望它是正常的。

new*_*erz 5

尝试这个:

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)


Eni*_*ity 5

听起来您正在尝试基于类型创建某种工厂方法。也许这可能会有所帮助:

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)