Я занимаюсь разработкой службы Windows и ссылаюсь на библиотеку .NET Standard, где у меня есть модуль Autofac. Я собираюсь назвать эту библиотеку как A
. У меня есть следующее PropertyGroup
в csproj:
<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
</PropertyGroup>
А это модуль Autofac, указанный ранее:
public class DefaultModule:Module
{
protected override void Load(ContainerBuilder builder)
{
#if net461
builder.Register(context => {
return new BusSettings
{
HostAddress = System.Configuration.ConfigurationManager.AppSettings["HostAddress"],
Username = System.Configuration.ConfigurationManager.AppSettings["Username"],
Password = System.Configuration.ConfigurationManager.AppSettings["Password"],
QueueName=System.Configuration.ConfigurationManager.AppSettings["QueueName"]
};
}).AsSelf();
#else
builder.Register(context => {
var configuration = context.Resolve<IConfiguration>();
return new BusSettings
{
HostAddress = configuration["BusSettings:HostAddress"],
Username = configuration["BusSettings:Username"],
Password = configuration["BusSettings:Password"],
QueueName = configuration["BusSettings:QueueName"]
};
}).AsSelf();
#endif
Теперь я создал консольное приложение .NET Framework, используя 4.61 в качестве Target Framework. И вот код, который я использую для загрузки модулей:
//Library A is loaded By ExtractCustomAssemblyModules
List<Assembly> assemblies = ExtractCustomAssemblyModules();
containerBuilder.RegisterAssemblyModules(assemblies.ToArray());//Register custom modules
Когда я выполняю containerBuilder.Build()
Я не вижу, как Autofac загружает модуль и регистрирует службы, которые есть в моем пользовательском модуле, поэтому выдает мне исключение, поскольку он не может найти зависимость. Теперь я создал консольное приложение .NET Core 2 и сделал то же самое, в то время, чтобы вызвать containerBuilder.Build()
, код переходит к модулю, и я вижу, что службы зарегистрированы и на этот раз не исключение
Почему модуль Autofac не загружается в консольное приложение .NET Framework?
PS: я нашел этот блог действительно полезным, я переключил первый целевой фреймворк на .NET 4.61, как вы можете видеть в PropertyGroup
, но все же я вижу серый 4.61 код внутри if .