C# 注册表中的类型未解析
我有以下注册:C# 注册表中的类型未解析,c#,autofac,C#,Autofac,我有以下注册: builder.RegisterAssemblyTypes(AssemblyUtils.GetAllAssemblies()) .Where(t => typeof(IReadModelService).IsAssignableFrom(t) || typeof(IDatabaseRepository).IsAssignableFrom(t)) .AsImplementedInterfaces() .InstancePerDependency() .Properti
builder.RegisterAssemblyTypes(AssemblyUtils.GetAllAssemblies())
.Where(t => typeof(IReadModelService).IsAssignableFrom(t) ||
typeof(IDatabaseRepository).IsAssignableFrom(t))
.AsImplementedInterfaces()
.InstancePerDependency()
.PropertiesAutowired();
其中注册了以下类型:
public class DeviceReadModelService : IDeviceReadModelService
{
public DeviceReadModelService(ReadModelsSettings dd)
{ }
}
该位注册一个实例:
builder.RegisterInstance(JsonConvert.DeserializeObject(File.ReadAllText(configFilePath), typeof(ReadModelsSettings)))
.As<ReadModelsSettings>();
这两种类型都已解析。我看不到此类型的注册
DeviceAdModelService:IDeviceReadModelService
builder.RegisterType<DeviceReadModelService>().As<IDeviceReadModelService>()
也许这样会更好
var assembly = Assembly.GetExecutingAssembly();// or your target Assembly
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.Name.EndsWith("Repository") || t.Name.EndsWith("Service"))
.AsImplementedInterfaces().InstancePerDependency()
.PropertiesAutowired();
如果删除自动注册,手动注册是否有效?例如,
builder.RegisterType().As()
@win如果我进行手动注册,它确实可以工作。。。无法真正理解泛型代码的问题是什么,因为我仍然可以看到注册的类型。该类型实现了IReadModelService接口。使用我的原始代码,两个注册都在那里,如果它有一个接受ReadModelsSetting的构造函数,并且该构造函数也已注册,那么它就无法旋转DeviceAdModelService,但是使用一个空构造函数,它可以在您注册IDEVICEREADModelService的地方工作。我刚刚告诉您,使用我的原始代码,所有内容都会注册,问题是对象之间的依赖关系无法解决。这个问题在某种程度上与生命周期范围有关
builder.RegisterType<DeviceReadModelService>().As<IDeviceReadModelService>()
public interface IReadModelsSettings { }
public class ReadModelsSettings : IReadModelsSettings { }
builder.Register<ReadModelsSettings>((c) => { return JsonConvert.DeserializeObject(File.ReadAllText(configFilePath), typeof(ReadModelsSettings)) }).As<IReadModelsSettings>().SingleInstance();
builder.RegisterAssemblyTypes(AssemblyUtils.GetAllAssemblies())
.Where(t => typeof(IReadModelService).IsAssignableFrom(t) ||
typeof(IDatabaseRepository).IsAssignableFrom(t))
.AsImplementedInterfaces()
.InstancePerDependency()
.PropertiesAutowired();
var assembly = Assembly.GetExecutingAssembly();// or your target Assembly
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.Name.EndsWith("Repository") || t.Name.EndsWith("Service"))
.AsImplementedInterfaces().InstancePerDependency()
.PropertiesAutowired();