jon*_*ode 5 c# dependency-injection .net-core
我有一个界面
public interface IEvent { }
Run Code Online (Sandbox Code Playgroud)
一个Event类
public class ContactEvent : IEvent { }
Run Code Online (Sandbox Code Playgroud)
两个事件处理程序类
public class ContactCreateHandler : IEventHandler<ContactEvent> { }
public class ContactUpdateHandler : IEventHandler<ContactEvent> { }
Run Code Online (Sandbox Code Playgroud)
在.NET 4.5中,这可以使用Autofac
var assemblies = BuildManager.GetReferencedAssemblies()
.Cast<Assembly>()
.ToArray()
builder.RegisterAssemblyTypes(assemblies)
.AsClosedTypesOf(typeof(IEventHandler<>)).AsImplementedInterfaces().InstancePerRequest();
Run Code Online (Sandbox Code Playgroud)
然后我会得到基于类型T的类列表
var handlerList = _container.Resolve<IEnumerable<IEventHandler<T>>>();
Run Code Online (Sandbox Code Playgroud)
如何在.NET Core中执行此操作
Jus*_*eno 15
你可以使用Scrutor.然后,您可以扫描并分配这样的处理程序:
// Automatically discover and register all message handlers...
services.Scan(
x =>
{
var entryAssembly = Assembly.GetEntryAssembly();
var referencedAssemblies = entryAssembly.GetReferencedAssemblies().Select(Assembly.Load);
var assemblies = new List<Assembly> { entryAssembly }.Concat(referencedAssemblies);
x.FromAssemblies(assemblies)
.AddClasses(classes => classes.AssignableTo(typeof(IEventHandler<>)))
.AsImplementedInterfaces()
.WithScopedLifetime();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2910 次 |
| 最近记录: |