我复制了下面的代码,它工作得很好,但我已经修改了它以满足我的需要,通过将 I 添加到当前名称来创建一个具有DatabaseSettings
相同UserSettings
后缀的接口。但问题是它试图将接口注册为接口,这是错误的?
在进行更改之前,settings
变量只有两个条目,现在我已经添加了接口,settings
正在拾取接口(因为后缀),因此它现在具有条目,而不是将它们添加为条目,我想将它们与相应的类一起使用并仍然调用.LoadSection(type)
public class SettingsModule : Module
{
private readonly string _configurationFilePath;
private readonly string _sectionNameSuffix;
public AeSettingsModule(string configurationFilePath, string sectionNameSuffix = "Settings")
{
_configurationFilePath = configurationFilePath;
_sectionNameSuffix = sectionNameSuffix;
}
protected override void Load(ContainerBuilder builder)
{
var settings = Assembly.Load(nameof(DataLayer))
.GetTypes()
.Where(t => t.Name.EndsWith(_sectionNameSuffix, StringComparison.InvariantCulture))
.ToList();
settings.ForEach(type =>
{
builder.Register(c => c.Resolve<ISettingsReader>().LoadSection(type))
.As(type)
.SingleInstance();
});
}
}
public class DatabaseSettings: IDatabaseSettings
{
public string ConnectionString { get; set; }
public int TimeoutSeconds { get; set; }
}
public interface IDatabaseSettings
{
string ConnectionString { get; set; }
int TimeoutSeconds { get; set; }
}
我收到的错误消息是:
`System.MissingMethodException: 'Cannot create an instance of an interface.'`
因为我已经将`构造函数注入从类更改为接口:
public UserService(IDatabaseSettings databaseSettings, IUserSettings userSettings)
{
...
}
因为我已经添加了接口并且它具有相同的前缀“设置”,所以它选择了我不想要的接口,而是我想将它与相应的类一起使用?
我正在尝试执行此操作(但使用上面的语法,因为我LoadSection也想调用):
builder.RegisterType<DatabaseSettings>().As<IDatabaseSettings>();
幕布斯6054654
相关分类