1 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
我這樣做了,那是很久以前的事了,使用 Nancy、EasyQ 和 DryIOC
它不是基于屬性而是基于類
將注冊所有具體類的輔助方法IPipeline
RegisterMultipleTypesToContainer(container, typeof(IPipeline));
我想這就是 Scutor 所做的,但當時沒有 scutor,所以必須使用 Reflection,然后訂閱......
private void RegisterMultipleTypesToContainer(IContainer container, Type type)
{
var allTypes = AppDomain.CurrentDomain.GetAssemblies()
.Where(x =>
x.FullName.StartsWith("MyAssembly", StringComparison.Ordinal))SelectMany(x => x.GetTypes());
var types = allTypes.Where(x => type.IsAssignableFrom(x) && x.IsClass && !x.IsAbstract).ToList();
foreach (var concreteTypes in types)
{
var genericTypes = concreteTypes.GetInterfaces().Where(x => x != type).ToList();
foreach (var genericType in genericTypes)
{
container.Register(genericType, concreteTypes, Reuse.Singleton);
var pipeline = container.Resolve(genericType) as IPipeline;
pipeline.Subscribe();
}
}
}
public class HelloPipeline :
BasePipeline<HelloPipeline.Message>
{
IBusService _bus;
HelloPipeline(IBusService bus){
_bus = bus;
}
private Task ExecuteAsync(String channel, ) { }
public void Subscribe()
{
_bus.SubscribeAsync<T>(this.GetType().Name, this.ExecuteAsync);
}
}
剛剛檢查了舊代碼,但仍然有效,希望它能給您一個想法,但我認為您想要實現(xiàn)的目標與我所做的相同,但使用其他工具
- 1 回答
- 0 關注
- 163 瀏覽
添加回答
舉報