我复制了下面的代码,它工作得很好,但我已经修改了它以满足我的需要,通过将 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>();
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
我通过反复试验找到了一个解决方案,该应用程序按预期工作,但我不确定它是否高效、可靠等。
我发帖只是为了获得反馈,如果它有效,其他人也许可以使用它。
var settings = Assembly.Load(nameof(DataLayer))
.GetTypes()
.Where(t => t.Name.EndsWith(_sectionNameSuffix, StringComparison.InvariantCulture ) && !t.IsInterface)
.ToList();
settings.ForEach(type =>
{
builder.Register(c => c.Resolve<ISettingsReader>().LoadSection(type))
.As(type.GetInterfaces())
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
});
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消