Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 无法选择从另一个已注册实例属性解析参数的构造函数_C#_Dryioc - Fatal编程技术网

C# 无法选择从另一个已注册实例属性解析参数的构造函数

C# 无法选择从另一个已注册实例属性解析参数的构造函数,c#,dryioc,C#,Dryioc,下面的示例将applicationconfiguration实例的属性注册到容器中,下一次注册将使用该属性作为控制台编写器的构造函数 container.Register( Made.Of(r => ServiceInfo.Of<ApplicationConfiguration>(), f => f.SomeConfigurationValue), serviceKey: nameof(Application

下面的示例将applicationconfiguration实例的属性注册到容器中,下一次注册将使用该属性作为控制台编写器的构造函数

container.Register(
                Made.Of(r => ServiceInfo.Of<ApplicationConfiguration>(), f => f.SomeConfigurationValue),
                serviceKey: nameof(ApplicationConfiguration.SomeConfigurationValue));

container.Register(
            Made.Of(
                () => new ConsoleWriter(
                    Arg.Of<string>(nameof(ApplicationConfiguration.SomeConfigurationValue)))));
有没有办法做到这一点?这是我们的示例类。我们只想注册这两个类

private class ApplicationConfiguration
    {
        internal string SomeConfigurationValue => "Hello World";
    }

    private class ConsoleWriter
    {
        private readonly string _message;

        internal ConsoleWriter(string message)
        {
            this._message = message;
        }

        internal void Write(int times = 1)
        {
            for (var i = 0; i < times; i++) Console.WriteLine(this._message);
        }
    }
私有类应用程序配置
{
内部字符串SomeConfigurationValue=>“Hello World”;
}
私有类控制台编写器
{
私有只读字符串\u消息;
内部控制台编写器(字符串消息)
{
这个。_message=消息;
}
内部无效写入(整数倍=1)
{
对于(var i=0;i
选项1:
c、 登记册(
由(()=>新ConsoleWriter(参数索引(0))制成,
_=>c.Resolve().SomeConfigurationValue));
选项2:如果将ConsoleWriter构造函数更改为public
c、 寄存器(制造:的参数)
.Name(“message”,_=>c.Resolve().SomeConfigurationValue));
选项3:最简单的,可能是最好的一个使用。
c、 注册删除门(
r=>new ConsoleWriter(r.Resolve().SomeConfigurationValue));
Unable to resolve String {ServiceKey=DryIoc.Made+TypedMade`1[System.String]} 
as parameter "message"
in DryIoc.Program.ConsoleWriter.
Where no service registrations found
and number of Rules.FallbackContainers: 0
and number of Rules.UnknownServiceResolvers: 0
private class ApplicationConfiguration
    {
        internal string SomeConfigurationValue => "Hello World";
    }

    private class ConsoleWriter
    {
        private readonly string _message;

        internal ConsoleWriter(string message)
        {
            this._message = message;
        }

        internal void Write(int times = 1)
        {
            for (var i = 0; i < times; i++) Console.WriteLine(this._message);
        }
    }
  option 1:

    c.Register<ConsoleWriter>(
      Made.Of(() => new ConsoleWriter(Arg.Index<string>(0)), 
      _ => c.Resolve<ApplicationConfiguration>().SomeConfigurationValue));

  option 2: if you change the ConsoleWriter constructor to public

    c.Register<ConsoleWriter>(made: Parameters.Of
     .Name("message", _ => c.Resolve<ApplicationConfiguration>().SomeConfigurationValue));

  option 3: the simplest, may be the best one to use.

    c.RegisterDelegate<ConsoleWriter>(
        r => new ConsoleWriter(r.Resolve<ApplicationConfiguration>().SomeConfigurationValue));