实现Resolve <interface []>和Resolve <ienumerable <interface>&gt;在ServiceStack和NinjectIocAdapter </ienumerable <interface> </interface []>中

时间:2013-01-23 17:47:35

标签: c# ninject servicestack

您好我正在尝试连接ServiceStack的Ninject适配器。

Ninject有两种解决方法,get和getall。当你试图解决这样的事情列表时,应该使用GetAll:

Interface[] arrayOfInterfaces = _kernel.GetAll(typeof(Interface))

问题是这个和服务堆栈不匹配。我提出了这个解决方案,但我对此并不满意。如何更好地实现这一点的任何帮助或想法将非常感激。

    public T Resolve<T>()
    {
        if (typeof (Array).IsAssignableFrom(typeof (T)))
        {
            throw new NotSupportedException("Can not resolve array types, use IEnumerable");
        }

        if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(IEnumerable<>))
        {
            var elementType = typeof(T).GetGenericArguments()[0];

            var listOfTypes = Activator.CreateInstance(typeof(List<>).MakeGenericType(elementType)) as IList;

            foreach (var o in _kernel.GetAll(elementType))
            {
                listOfTypes.Add(o);
            }
            return (T)listOfTypes;
        }

        return _kernel.Get<T>();
    }

目前它仅支持IEnumerable<T>而不支持T[]

0 个答案:

没有答案