2

こんにちは、Ninject アダプターを接続しようとしていServiceStackます。

Ninject には、get と getall という 2 つの解決メソッドがあります。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