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);
}

但是对于下面的代码,我得到了一个空值(未创建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 回答