![](/img/trans.png)
[英]C# reflection get all subclasses of certain class and call generic method with their type
[英]Call method of lazy generic type with reflection in c#
如果IsValueCreated我想用反射調用_baseInfoService的close方法。 我該如何進行反射?
public static partial class ServiceFactory
{
private static readonly Lazy<ServiceWrapper<IBaseInfoWcfService>> _baseInfoService =
new Lazy<ServiceWrapper<IBaseInfoWcfService>>(CreateWrapper<IBaseInfoWcfService>);
public static IBaseInfoWcfService BaseInfoService => _baseInfoService.Value.Instance;
}
class ServiceWrapper<T>
{
public T Instance { get; private set; }
public ServiceWrapper(T instance) {
Instance = instance;
}
public void Close() {
}
}
public interface IBaseInfoWcfService
{
}
public class BaseInfoWcfServiceImpl : IBaseInfoWcfService
{
public BaseInfoWcfServiceImpl() {
}
}
public static partial class ServiceFactory
{
private static readonly Lazy<ServiceWrapper<IBaseInfoWcfService>> _baseInfoService =
new Lazy<ServiceWrapper<IBaseInfoWcfService>>(CreateWrapper<IBaseInfoWcfService>);
public static IBaseInfoWcfService BaseInfoService => _baseInfoService.Value.Instance;
private static ServiceWrapper<IBaseInfoWcfService> CreateWrapper<T>() where T : IBaseInfoWcfService {
return new ServiceWrapper<IBaseInfoWcfService>(new BaseInfoWcfServiceImpl());
}
}
static void Main(string[] args) {
var baseInfoService = typeof(ServiceFactory).GetField("_baseInfoService", BindingFlags.Static | BindingFlags.NonPublic);
var instance = baseInfoService.GetValue(null);
var isValueCreated = (bool)instance.GetType().GetProperty("IsValueCreated").GetValue(instance);
if (isValueCreated) {
var value = instance.GetType().GetProperty("Value").GetValue(instance);
var close = (Action)value.GetType().GetMethod("Close").CreateDelegate(typeof(Action), value);
close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.