4

コントローラーで依存性注入を使用しようとしており、コントローラー クラスでサービス インスタンスを作成するために System.Web.MvcDependencyResolver.Current.GetService() を使用しています。

以下のように、サービス インターフェイスが一般的でない場合、これは正常に機能します。

public interface IProfileManagementService
{
   IList<News> GetSavedSearchList(int userObjectId, ApplicationType applicationType,int? vendorUserObjectId);
}

以下の依存関係リゾルバーの構文は、ProfileManagementServiceのインスタンスを提供します

DependencyResolver.Current.GetService<IProfileManagementService>();

しかし、以下のような一般的なサービス インターフェイスを作成すると、

public interface ICommonProfileManagementService<T>
{
   IList<T> GetSavedSearchList(int userObjectId, ApplicationType applicationType,int? vendorUserObjectId);
}

しかし、以下のコードで null ( CommonProfileManagementServiceオブジェクトが作成されない) を取得します

DependencyResolver.Current.GetService<ICommonProfileManagementService<News>>();

別の通過方法をいくつか提案してください

IService<T>

それ以外の

IService

DependencyResolver.Current.GetService() に

4

1 に答える 1

3

DependencyResolver からジェネリックを返すために必要な構文を含む完全なコードを次に示します。

using Microsoft.Practices.Unity;
using System;
using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity.Mvc;

namespace ConsoleApplication2
{
    class Program
    {
        public interface IService<T>
        {
            List<T> GetService();
        }

        public class Service<T> : IService<T>
        {
            public List<T> GetService()
            {
                return new List<T>();
            }
        }

        static void Main(string[] args)
        {
            var container = new UnityContainer();

            container.RegisterType(typeof(IService<>), typeof(Service<>));

            DependencyResolver.SetResolver(new UnityDependencyResolver(container));

            var service = DependencyResolver.Current.GetService(typeof(IService<string>));

            Console.WriteLine(service.ToString());

            Console.ReadKey();
        }
    }
}
于 2014-06-20T15:21:42.877 に答える