Search code examples
xmlprivateautofacsetter

Initialization through XML of autopropery with private setter in Autofac


I'm using some Autofac modules to initialize config files. E.g.:

public class Config()
{
  public String ConnectionString { get; set; }
}

Regarding XML configuration everything looks like:

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

I'm using this configuration to have Configuration, but in order to make it immutable I use a private setter {get; private set;}. This doesn't works in Autofac, can you please advise how should use private setter initialization?


Solution

  • In addition to Peter's answer, if you want to stay with property and property injection, you can add "immutability" manually by code, something like that:

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