2

嗨,我正在尝试为ServiceStack.

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[]

4

0 回答 0