我试图在最新的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>();
});
}