问题描述
我正在尝试向RegisterassemblyTypes注册程序集,但无法解析服务。得到以下异常。 InvalidOperationException:尝试激活“ Ui.Controllers.WeatherForecastController”时,无法解析类型为“ applicationservices.Services.ITestService”的服务。
服务位于不同的类库中。将这些服务注入到天气控制器构造函数中。
Program.cs
public class Program
{
public static void Main(string[] args)
{
//CreateHostBuilder(args).Build().Run();
var host = Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureContainer<ContainerBuilder>(b =>
{
b.RegisterModule(new RegisterServices());
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).Build();
host.Run();
}
}
Startup.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public ILifetimeScope AutofacContainer { get; private set; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddOptions();
}
public void ConfigureContainer(ContainerBuilder builder)
{
builder.RegisterModule(new RegisterServices());
}
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
this.AutofacContainer = app.applicationservices.GetAutofacRoot();
var aa = this.AutofacContainer.ComponentRegistry.Registrations.Where(x =>
x.Activator.LimitType.Name.StartsWith("Tes"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
RegisterService.cs
public class RegisterServices : Autofac.Module
{
private const string RepositoryNamespace = "applicationservices";
protected override void Load(ContainerBuilder builder)
{
base.Load(builder);
string binPath =
System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory);
List<Assembly> allAssemblies = new List<Assembly>();
foreach (string dll in Directory.GetFiles(binPath,"*.dll",SearchOption.AllDirectories))
{
try
{
allAssemblies.Add(Assembly.LoadFile(dll));
}
catch (FileLoadException loadEx)
{ } // The Assembly has already been loaded.
catch (BadImageFormatException imgEx)
{ }
} // foreach dll
var cAssembly = allAssemblies
.Where(a => a.FullName.StartsWith(RepositoryNamespace,StringComparison.InvariantCultureIgnoreCase))
.FirstOrDefault();
builder.RegisterassemblyTypes(cAssembly)
.Where(t => t.Name.EndsWith("Service"))
.As(t => t.GetInterfaces()[0])
.AsImplementedInterfaces()
.InstancePerLifetimeScope();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)