在mvc api项目中如何编写构造函数

问题描述 投票:0回答:1

尝试创建“CatalogController”类型的控制器时发生错误。确保控制器具有无参数公共构造函数。

c# asp.net-mvc api code-first
1个回答
1
投票

当您从控制器请求资源时,框架需要处理该请求。因此,路由识别控制器、操作等,然后需要实例化控制器的实例才能调用所需的方法。

为了做到这一点,他要么需要一个公共的空构造函数,要么需要某种方法来解决构造函数的依赖关系。

在您的情况下,您有一个 ctor 依赖于 ICatalogModelFactory。该框架将需要您实现一个Dependency Resolver,并在应用程序启动时注册新的解析器(Global.asax),如下所示:

DependencyResolver.SetResolver(new MyDependencyResolver());

这是 UnityContainer 自定义依赖项解析器的示例,如在此 link 中找到的:

public class UnityDependencyResolver : IDependencyResolver
{        
    IUnityContainer container;       
    public UnityDependencyResolver(IUnityContainer container)
    {
        this.container = container;
    }

    public object GetService(Type serviceType)
    {
        try
        {
            return container.Resolve(serviceType);
        }
        catch
        {               
            return null;
        }
    }

    public IEnumerable<object> GetServices(Type serviceType)
    {
        try
        {
            return container.ResolveAll(serviceType);
        }
        catch
        {                
            return new List<object>();
        }
    }
}

注册发生在Global.asax Application_Start方法中:

IUnityContainer container = GetUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));

顺便说一句,另一种方法是创建一个 ControllerFactory 并简单地使用 DI 容器解析控制器。我更喜欢使用依赖解析器来解析控制器。

© www.soinside.com 2019 - 2024. All rights reserved.