2017-03-08 83 views
0

我有以下登记:类型不解决

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>(); 

而且这是我遇到的问题。

如果我试图解决类型ReadModelsSettings它正常工作,但如果我尝试解决IDeviceReadModelService它失败,它基本上说,即使我可以在注册列表中注册ReadModelsSettings。

container.Resolve<ReadModelsSettings>(); -- works 
container.Resolve<IDeviceReadModelService>(); --fails 

任何想法是什么问题?

UPDATE

只是把它清除掉,但我改变DeviceReadModelService来实现:

public class DeviceReadModelService : IDeviceReadModelService 
{ 
    public DeviceReadModelService() 
    { } 
} 

这两种类型都解决了。

+0

是否手工登记工作,如果你删除自动登记?例如,'builder.RegisterType ()。作为()' – Win

+0

@win如果我手动注册它确实工作...不能真正理解什么是通用代码的问题,因为我仍然可以看到已注册的类型。 – Marco

回答

0

我看不到这种类型的注册DeviceReadModelService : IDeviceReadModelService

builder.RegisterType<DeviceReadModelService>().As<IDeviceRea‌​dModelService>() 

并且您可以注册一个接口并使用您创建的实例实现类型。

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(); 
+0

该类型实现了IReadModelService接口。我的原始代码都注册在那里,它只是无法旋转DeviceReadModelService,如果是有一个构造函数接受ReadModelsSettings,它也注册,但它有一个空构造函数 – Marco

+0

注册IDeviceReadModelService – levent

+0

我刚刚告诉过你,用我原来的代码一切都得到注册,问题是对象之间的依赖关系没有解决。这个问题与寿命范围有些相关 – Marco