Autofac中带私有setter的AutoProperty的XML初始化

Autofac中带私有setter的AutoProperty的XML初始化,xml,private,autofac,setter,Xml,Private,Autofac,Setter,我正在使用一些Autofac模块初始化配置文件。例如: public class Config() { public String ConnectionString { get; set; } } 关于XML配置,一切看起来都像: <Autofac defaultAssembly="Autofac"> <components> <component type="Autofac.Configuration.Config, Autofac" in

我正在使用一些Autofac模块初始化配置文件。例如:

public class Config()
{
  public String ConnectionString { get; set; }
}
关于XML配置,一切看起来都像:

 <Autofac defaultAssembly="Autofac">
   <components>
     <component type="Autofac.Configuration.Config, Autofac" instance-scope="single-instance" >
       <properties>
         <property name="ConnectionString" value="Cnstring" />
       </properties>
     </component>
   </components>
 </Autofac>

我使用此配置来进行配置,但为了使其不可变,我使用了私有setter
{get;private set;}

这在Autofac中不起作用,您能建议如何使用私有setter初始化吗?

只要属性是只读的,Autofac将无法通过属性注入对其进行初始化。在这种情况下,您应该使用构造函数注入。

除了Peter的答案之外,如果您想继续使用属性和属性注入,您可以通过代码手动添加“不变性”,类似于:

public class Config
{
    private string _connectionString;

    public String ConnectionString
    {
        get
        {
            return _connectionString;
        }
        set
        {
            if (_connectionString != null) throw new ReadOnlyException("_connectionString");
            if (value == null) throw new ArgumentNullException("value");

            _connectionString = value;
        }
    }
}

当然,我当然可以,但这样的值不是由Autofac填充的。@Johnny\D为什么?它有一个公开的设定者。哦,我的误判。对不起,你的解决方案确实更适合我的问题。然而,我已经成功地将逻辑封装在配置文件之上的一个级别上,以便只读。无论如何,谢谢。