Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决MVC控制器与简单注入器之间存在值类型依赖关系?_C#_Asp.net Mvc_Simple Injector - Fatal编程技术网

C# 如何解决MVC控制器与简单注入器之间存在值类型依赖关系?

C# 如何解决MVC控制器与简单注入器之间存在值类型依赖关系?,c#,asp.net-mvc,simple-injector,C#,Asp.net Mvc,Simple Injector,我有以下控制器: public class MyController : Controller { private readonly IService service; private readonly int intDependency; public MyController(IService service, int intDependency) { this.service = service; this.intDependenc

我有以下控制器:

public class MyController : Controller {
    private readonly IService service;
    private readonly int intDependency;

    public MyController(IService service, int intDependency) {
        this.service = service;
        this.intDependency = intDependency;
    }

    ...
}
显然,解析不起作用,我也不能使用委托提供构造函数参数,因为这将导致多个构造函数注册

在这种情况下,正确的处理方法是什么?作为依赖项的值类型通常不正确吗?将依赖项包装在接口后面会更好吗

作为依赖项的值类型通常不正确吗

事实上,正如您所看到的,喷油器无法知道必须注入哪个
int
。没什么意义

将依赖项包装在接口后面会更好吗

在这种情况下,正确的处理方法是什么

你说对了。接口或类

例如:

public class MyConfig
{
    public int MyInt {get; set;}
}
您可以这样配置SimpleInjector:

container.RegisterSingleton(new MyConfig { MyInt = 42 });
您的控制器是:

public MyController(IService service, MyConfig config) { ...
注意:有一种注入基元类型的方法: 但是,像我的示例那样,将原语封装在类中更简单、更干净

作为依赖项的值类型通常不正确吗

事实上,正如您所看到的,喷油器无法知道必须注入哪个
int
。没什么意义

将依赖项包装在接口后面会更好吗

在这种情况下,正确的处理方法是什么

你说对了。接口或类

例如:

public class MyConfig
{
    public int MyInt {get; set;}
}
您可以这样配置SimpleInjector:

container.RegisterSingleton(new MyConfig { MyInt = 42 });
您的控制器是:

public MyController(IService service, MyConfig config) { ...
注意:有一种注入基元类型的方法: 但是,像我的示例那样,将原语封装在类中更简单、更干净

将依赖项包装在接口后面会更好吗

是的,这将是建议的解决方案。不支持值类型。不要直接注入值,而是将其封装在类中并注入

将接口置于实现之上的最佳实践,但这不是必需的。简单的喷油器没关系。因此,这将起作用:

public class Values
{
    public Values(int value)
    { 
        this.SomeValue = value; 
    }

    public int SomeValue { get; }
}

// Register as
container.RegisterSingleton<Values>(() => new Values(1));
公共类值
{
公共值(int值)
{ 
this.SomeValue=value;
}
公共int SomeValue{get;}
}
//注册为
container.RegisterSingleton(()=>新值(1));
有很多选择,虽然有点难看,但我不想这样做。这些都被描述了

将依赖项包装在接口后面会更好吗

是的,这将是建议的解决方案。不支持值类型。不要直接注入值,而是将其封装在类中并注入

将接口置于实现之上的最佳实践,但这不是必需的。简单的喷油器没关系。因此,这将起作用:

public class Values
{
    public Values(int value)
    { 
        this.SomeValue = value; 
    }

    public int SomeValue { get; }
}

// Register as
container.RegisterSingleton<Values>(() => new Values(1));
公共类值
{
公共值(int值)
{ 
this.SomeValue=value;
}
公共int SomeValue{get;}
}
//注册为
container.RegisterSingleton(()=>新值(1));

有很多选择,虽然有点难看,但我不想这样做。这些都被描述了

hmm,这几乎是完全相同的答案!结构呢?它们是值类型,但行为类似于引用类型。嗯,这几乎是完全相同的答案!结构呢?它们是值类型,但行为类似于引用类型。似乎我在键入时读到了你的心思。。。同样的答案同样的文章,我刚刚看到了你的答案。好像我在打字的时候读到了你的心思。。。同样的答案同样的文章,我刚刚看到你的答案。