2017-03-08 138 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