Autofac中带私有setter的AutoProperty的XML初始化
我正在使用一些Autofac模块初始化配置文件。例如: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
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为什么?它有一个公开的设定者。哦,我的误判。对不起,你的解决方案确实更适合我的问题。然而,我已经成功地将逻辑封装在配置文件之上的一个级别上,以便只读。无论如何,谢谢。