3
A
回答
3
據我知道你需要創建在StructureMap.Graph
命名空間中找到一個自定義IRegistrationConvention
。
執行公約
public class ServiceDiscoveryConvention
: StructureMap.Graph.IRegistrationConvention
{
public void Process(Type type, Registry registry)
{
// check if type has attribute
// add to registry using the registry variable
}
}
公約添加到掃描儀
Scan(cfg =>
{
cfg.TheCallingAssembly(); // or whatever assemblies you are scanning
cfg.Convention<ServiceAttributeConvention>();
});
備註
如果你有時間你的決定,你可能想使用接口而不是a ttributes。使用界面,您可以爲所有類提供通用合同,並且在項目增長時更容易處理。
屬性有遍佈整個代碼的傾向,重構它們可能是一個真正的痛苦。接口在重構時有更好的工具支持。
我使用的接口,類似的任務(插件系統),如
public class TypeScanner<T> : IRegistrationConvention
{
private static readonly Type PluginInterface = typeof(T);
public void Process(Type type, Registry registry)
{
if (type.IsAbstract || type.BaseType == null) return;
if (PluginInterface.IsAssignableFrom(type) == false) return;
registry.For(PluginInterface).Singleton().Add(instance);
}
}
使用公約將是類似的:
Scan(cfg =>
{
cfg.TheCallingAssembly(); // or whatever assemblies you are scanning
cfg.Convention<TypeScanner<IYourService>>();
});
如果你的約定需要構造函數的參數,你可以使用With
:
Scan(cfg =>
{
cfg.TheCallingAssembly(); // or whatever assemblies you are scanning
var convention = new SomeConvention(x,y,z);
cfg.With(convention);
});
2
沒有必要使用StructureMap註冊類型if你不會通過接口來檢索它。
考慮:
[Service]
public class A {}
[Service]
public class B {}
下面的代碼將工作得很好,和StructureMap將填充在A或B的任何構造函數依賴,沒有任何特殊登記:
var instanceA = ObjectFactory.GetInstance<A>();
var instanceB = ObjectFactory.GetInstance<B>();
相關問題
- 1. 使用StructureMap的掃描器註冊封閉類型
- 2. 使用StructureMap掃描
- 3. 如何註冊具體類基於structuremap
- 4. structuremap使用objectfactory.initialize掃描,也
- 5. StructureMap:顯式與掃描註冊之間的區別
- 6. 註冊具有通用類型的Contrete類與StructureMap
- 7. StructureMap和掃描程序集
- 8. StructureMap掃描組件
- 9. StructureMap - 掃描 - 以基本實現和具體的通用接口
- 10. StructureMap - 註冊泛型類型
- 11. 使用StructureMap創建插件掃描器
- 12. Autofac - 掃描和批量註冊通用類型
- 13. 如何掃描註解的類?
- 14. 具有StructureMap和Unobtrusive的項目不註冊訂閱
- 15. StructureMap - 如何註冊和解析的開放式泛型類型
- 16. 如何在使用StructureMap時爲屬性使用自定義注入屬性?
- 17. 註冊一個不同的通用類型作爲掃描
- 18. 帶有嵌套屬性的DyanamoDB掃描
- 19. structuremap:使用setter注入設置對象的所有屬性
- 20. 當使用StructureMap和NServiceBus時,屬性注入不起作用
- 21. 如何使用具有實例屬性的描述符?
- 22. Autofac:通過掃描獲取註冊
- 23. 用StructureMap注入靜態屬性?
- 24. SimpleInjector:註冊具有數據參數和相關性的類
- 25. StructureMap自動註冊後代類
- 26. StructureMap:如何註冊System.Type實現
- 27. 掃描給定的自定義屬性的所有類
- 28. 註冊表掃描類型的結構圖截取
- 29. ASP.NET WebAPI - 如何掃描註冊的操作
- 30. 註釋掃描不掃描類路徑中的外部罐子
aaaaahhh AOP ... –