具有Azure工作者角色的Ninject

时间:2015-12-25 19:39:05

标签: c# azure ninject

我想在我的WorkerRole应用程序中使用ninject依赖注入器。 但是我遇到了一些问题。在运行我的工作角色后,他立即崩溃了,我不知道为什么会这样。

我的WorkerRole.cs代码:

public class WorkerRole : NinjectRoleEntryPoint
    {
        private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
        private readonly ManualResetEvent _runCompleteEvent = new ManualResetEvent(false);

        private IKernel _kernel;
        public ITestA TestA { get; }
        protected WorkerRole(ITestA testA)
        {
            TestA = testA;
        }

        public override void Run()
        {
            Trace.TraceInformation("WorkerRole1 is running");

            try
            {
                RunAsync(_cancellationTokenSource.Token).Wait();
            }
            finally
            {
                _runCompleteEvent.Set();
            }
        }

        protected override IKernel CreateKernel()
        {
            _kernel = new StandardKernel();
            _kernel.Bind<ITestA>().To<TestA>();

            return _kernel;
        }

        private async Task RunAsync(CancellationToken cancellationToken)
        {
            // TODO: Replace the following with your own logic.
            while (!cancellationToken.IsCancellationRequested)
            {
                TestA.Hello();

                Trace.TraceInformation("Working");
                await Task.Delay(1000);
            }
        }
    }

我为它创建了一个简单的接口和类,如下所示:

public interface ITestA
    {
        void Hello();
    }

    public class TestA: ITestA
    {
        public void Hello()
        {
            Console.WriteLine("Ninject with Worker Role!");
        }
    }

这一切,我不知道为什么我的应用程序崩溃了,请帮我解决这个问题。 非常感谢。

1 个答案:

答案 0 :(得分:1)

您的问题很可能是因为您将NinjectRoleEntryPoint和WorkerRole保留在同一个Worker Role项目中。您应该只在工作者角色项目中保留一个 RoleEntryPoint实现,并且应将NinjectRoleEntryPoint移动到单独的类库项目中。

简而言之 - 根据设计,您不能拥有多个在一个辅助角色中继承RoleEntryPoint的类。