在.net 5中创建实例和运行方法的更好方法

本文关键字:方法 运行 更好 实例 net 创建 | 更新日期: 2023-09-27 18:17:28

我已经将我的。net 4.5转换为。net 5,一切似乎都是关于DI的,这很好。

为了加载我所有的AutoMapper配置文件,我想我应该创建一个针对它们的接口,然后我需要执行这个方法,我这样做了。

// interface
public interface IAutoMapperMapping
{
    void Apply();
}
// class that implements interface
public class PageMapping : IAutoMapperMapping
{
    public void Apply()
    {
        // mappaing config here
    }
}
// load all classes
public void ConfigureServices(IServiceCollection services)
{
    // Load all mappings files and apply
    var assembly = System.Reflection.Assembly.GetExecutingAssembly();
    var types = assembly.GetTypes()
        .Where(e => typeof(IAutoMapperMapping).IsAssignableFrom(e) && !e.IsInterface)
        .ToList();
    foreach (var type in types)
    {
        var instance = (IAutoMapperMapping)Activator.CreateInstance(type);
        instance.Apply();
    }
}

在。net 5中,或者在。net中,这是最好的方法吗?或者我做了一些我应该避免的坏事吗?

在.net 5中创建实例和运行方法的更好方法

看起来您实际上并没有向ASP注册任何类型。. NET 5服务DI容器。你所做的被称为程序集扫描,这是许多依赖注入容器的共同特性。

ASP中默认的容器。NET 5非常基础,不包括使用程序集扫描在程序集中注册类型的功能。如果您愿意,您可以在ASP中注册所有类型。. NET 5服务容器,然后依赖于容器来解析IAutomapperMapping类型,而不是使用Activator.CreateInstance

或者,你可以使用像Autofac这样的容器(也有很多其他的好容器,但我喜欢这个,因为它背后有一个庞大的社区,甚至微软也用它来提供Azure移动服务)。您可以阅读Autofac汇编扫描及其对ASP的支持。这里是。NET 5。但是,您应该注意,这些都是测试质量的代码。