StructureMap-> Lamar .NET Core 3.1服务创建不起作用

我试图在最新的dotnet核心版本(3.1)上从StructureMap迁移到Lamar(4.1.0)

这个项目在改用Lamar之前就已经起作用了,但是发生了很多变化,让我迷失了方向。

问题?
扫描发生后,如何使用已扫描对象的构造函数创建对象的实例。我知道StructureMap有点不同,但是此代码以前可以工作。

下面的代码:

Startup.cs (尝试使用新的Lamar)


var container = new Container(cfg =>
{
    cfg.Scan(scanner =>
    {
        scanner.AssembliesAndExecutablesFromApplicationBaseDirectory(a => a.FullName.Contains("Project.Name.Here"));
        scanner.WithDefaultConventions();
        scanner.SingleImplementationsOfInterface();
    });


    cfg.For<IServerInformationDataaccess>()
        .Use(new ServerInformationDataaccess(Configuration.getconnectionString(DbConnectionKey),Container.GetInstance<IMapper>()));

Startup.cs (起作用的旧版本)

新Lamar(4.1)不允许我创建没有参数的

尝试了所有实例,但是它们没有用...所以我在这里

var container = new Container();

container.Configure(cfg =>
{
    cfg.Scan(s =>
    {
        s.AssembliesAndExecutablesFromApplicationBaseDirectory(a => a.FullName.Contains("Project.Name.Here"));
        s.WithDefaultConventions();
        s.SingleImplementationsOfInterface();
    });

    cfg.For<IServerInformationDataaccess>()
        .Use<ServerInformationDataaccess>(sida => new ServerInformationDataaccess(Configuration.getconnectionString(DbConnectionKey),container.GetInstance<IMapper>()));

Program.cs


public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseLamar()
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}
xaiwei007 回答:StructureMap-> Lamar .NET Core 3.1服务创建不起作用

在这种情况下,Use充当工厂委托

//...

cfg.For<IServerInformationDataAccess>()
    .Use<ServerInformationDataAccess>(c => { //<-- c in this case is a container context
        var connectionString = Configuration.GetConnectionString(DbConnectionKey);
        var mapper = c.GetInstance<IMapper>();
        return new ServerInformationDataAccess(connectionString,mapper);
    });

//...

参考Building Objects with Lambdas

本文链接:https://www.f2er.com/2815313.html

大家都在问