繁体   English   中英

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

[英]StructureMap -> Lamar .NET Core 3.1 service creation not working

我正在尝试在最新的 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 (旧的有效)

New 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>()));

程序.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>();
            });
}

在这种情况下, 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);
    });

//...

使用 Lambda引用建筑对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM