код.

аюсь сделать немного балансировки здесь. В настоящее время веб-задания Azure не поддерживают .NET Core.

С некоторой помощью я создал консольное приложение .NET Core и заставил его работать как WebJob. Кроме того, я пытаюсь реализовать Ninject для DI.

Код компилируется нормально, но когда я его запускаю, я получаю сообщение: «Для этого объекта не определен конструктор без параметров». ошибка - см. ниже.

Может быть, я нахожусь на некоторой неисследованной территории с Azure WebJobs, .NET Core 2.0 и Ninject, но есть идеи, что может быть причиной этого?

Кстати, у меня был точно такой же код, что и для WebJob, нацеленной на .NET Framework. Мне нужно было перейти на .NET Core 2.0, потому что я использую библиотеки классов, предназначенные для .NET Core 2.0. Я также использую DI в этих библиотеках классов, поэтому пытаюсь перенести свой WebJob на .NET Core 2.0 с помощью Ninject.

Постскриптум Я использую бета2 Azure.WebJobs 3.0.0 для преобразования моего консольного приложения .NET Core в WebJobs. Я также использую Ninject 3.2.2

ОБНОВЛЕНИЕ: вот мой код для JobActivator

public class BrmJobActivator : IJobActivator
    {
        private readonly IKernel _container;

        public BrmJobActivator(IKernel container)
        {
            _container = container;
        }

        public T CreateInstance<T>()
        {
            return _container.Get<T>();
        }
    }

И вот основная программа:

class Program
    {
        static readonly IKernel Kernel = new StandardKernel();
        static JobHostConfiguration config;

        static void Main(string[] args)
        {
            Environment.SetEnvironmentVariable("AzureWebJobsDashboard", "MySettings");
            Environment.SetEnvironmentVariable("AzureWebJobsStorage", "MySettings");

            BootStrapIoc();

            config = new JobHostConfiguration();

            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();
            }

            var host = new JobHost(config);
            host.RunAndBlock();
        }

        private static void BootStrapIoc()
        {
            Kernel.Load(Assembly.GetExecutingAssembly());
            config = new JobHostConfiguration
            {
                JobActivator = new BrmJobActivator(Kernel)
            };
        }
    }

ОБНОВЛЕНИЕ 2: теперь я получаю следующую ошибку.

Эта ошибка выдается в следующей строке - также см. Второе изображение.return _container.Get<T>();

ОБНОВЛЕНИЕ 3: Вот код вFunctions.cs файл:

public class Functions
{

   private static ISomeService1 _someService1;
   private static ISomeService2 _someService2;

   private static IConfiguration _configuration;


   public Functions(ISomeService1 someService1, ISomeService2 someService2, IConfiguration configuration)
   {
       _someService1 = someService1;
       _someService2 = someService2;
       _configuration = configuration;
    }

    public async Task ProcessQueueMessage([QueueTrigger("my-brm-queue")] QueueMessage message, TextWriter log)
    {

        // Consume service
        _someService1.DoSomething(message);

    }

}

ОБНОВЛЕНИЕ 4: Вот код в классе привязок Ninject:

public class NinjectBindings : Ninject.Modules.NinjectModule
{
   IConfiguration Configuration;

   public override void Load()
   {
       // Bind to IConfiguration
       var builder = new ConfigurationBuilder();
       builder.SetBasePath(Directory.GetCurrentDirectory());
       builder.AddJsonFile("appsettings.json");
       Configuration = builder.Build();
       Bind<IConfiguration>().ToMethod(ctx => {
          return Configuration;
       });

       // Create instances of clients
       var docDbClient = new ClassLibrary1.DocumentDbClient(Configuration);
       var tsClient = new ClassLibrary2.TableStorageClient(Configuration);

       // Bind Services
       Bind<ISomeService1>().To<SomeService1>();
       Bind<ISomeService2>().To<SomeService2>();

       // Bind Repositories
       Bind<IRepository1>().To<Repository1>();
       Bind<IRepository2>().To<Repository2>();

   }
}

Ответы на вопрос(0)

Ваш ответ на вопрос