如何使用scan扩展注册程序集中的所有接口,而不必在ASP.NET核心2中完全分离?
在StructureMap中:
Scan(_ =>
{
// Declare which assemblies to scan
_.Assembly("StructureMap.Testing");
});在巡洋舰:
collection.Scan(scan => scan
// We start out with all types in the assembly of ITransientService
.FromAssemblyOf<ITransientService>()
// AddClasses starts out with all public, non-abstract types in this
// assembly. These types are then filtered by the delegate passed to the
// method. In this case, we filter out only the classes that are assignable
// to ITransientService.
.AddClasses(classes => classes.AssignableTo<ITransientService>())
// We then specify what type we want to register these classes as.
// In this case, we want to register the types as all of its implemented
// interfaces. So if a type implements 3 interfaces; A, B, C, we'd end
// up with three separate registrations.
.AsImplementedInterfaces()
// And lastly, we specify the lifetime of these registrations.
.WithTransientLifetime()
// Here we start again, with a new full set of classes from the assembly
// above. This time, filtering out only the classes assignable to
// IScopedService.
.AddClasses(classes => classes.AssignableTo<IScopedService>())
// Now, we just want to register these types as a single interface,
// IScopedService.
.As<IScopedService>()
// And again, just specify the lifetime.
.WithScopedLifetime());发布于 2018-09-17 12:42:24
这将注册与StructureMap一样实现某些接口的所有类,默认情况下:
services.Scan(scan => scan
.FromAssemblyOf<IService>()
.AddClasses()
.AsImplementedInterfaces()
.WithTransientLifetime());发布于 2019-12-14 20:35:12
对于所有类型的使用寿命,您可以定义
services.Scan(scan => scan
.FromAssemblyOf<IApplicationService>()
.AddClasses(classes => classes.AssignableTo<IScopedDependency>())
.AsMatchingInterface()
.WithScopedLifetime()
.AddClasses(classes => classes.AssignableTo<ISingletonDependency>())
.AsMatchingInterface()
.WithSingletonLifetime()
.AddClasses(classes => classes.AssignableTo<ITransientDependency>())
.AsMatchingInterface()
.WithTransientLifetime()
);接口在哪里
public interface IApplicationService { }
public interface IScopedDependency { }
public interface ITransientDependency { }
public interface ISingletonDependency { }以及接口中的示例
public interface IUserService : IScopedDependency { }
public class UserService: IUserService { }https://stackoverflow.com/questions/52320413
复制相似问题