2016-11-21 12 views
1

私のダイアログを登録しようとしています。このような 私のダイアログのコンストラクタを見て:私のPiiiCKModuleAutofacサービスが登録されていません(Microsoft Bot Framework)

// Private fields 
protected readonly IGroupProvider _groupProvider; 
protected readonly IProductProvider _productProvider; 

protected IList<GroupResponseModel> _groups; 
protected IList<ProductResponseModel> _products; 

/// <summary> 
/// Default constructor 
/// </summary> 
public PiiiCKDialog(IGroupProvider groupProvider, IProductProvider productProvider) 
{ 
    SetField.NotNull(out this._groupProvider, nameof(groupProvider), groupProvider); 
    SetField.NotNull(out this._productProvider, nameof(productProvider), productProvider); 
} 

は、私はこれやった:

public class PiiiCKModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     base.Load(builder); 

     // Register our Luis Attribute 
     builder.Register(c => new LuisModelAttribute("key", "key")).AsSelf().AsImplementedInterfaces().SingleInstance(); 

     // Register some singleton services 
     builder.RegisterType<GroupProvider>().Keyed<IGroupProvider>(FiberModule.Key_DoNotSerialize).AsImplementedInterfaces().SingleInstance(); 
     builder.RegisterType<ProductProvider>().Keyed<IProductProvider>(FiberModule.Key_DoNotSerialize).AsImplementedInterfaces().SingleInstance(); 

     // Register the top level dialog 
     builder.RegisterType<PiiiCKDialog>().As<LuisDialog<object>>().InstancePerDependency(); 
    } 
} 

をそして、私のGlobal.ascx.csファイルに私がthe Autofac quick startを踏襲して作成しましたこれは:

public class WebApiApplication : HttpApplication 
{ 
    protected void Application_Start(object sender, EventArgs e) 
    { 
     // Create our builder 
     var builder = new ContainerBuilder(); 
     var config = GlobalConfiguration.Configuration; 

     // Register the alarm dependencies 
     builder.RegisterModule(new PiiiCKModule()); 

     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     // OPTIONAL: Register the Autofac filter provider. 
     builder.RegisterWebApiFilterProvider(config); 

     // Build. 
     var container = builder.Build(); 

     // Set the dependency resolver to be Autofac. 
     config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

     // Configure our Web API 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 

    public static ILifetimeScope FindContainer() 
    { 
     var config = GlobalConfiguration.Configuration; 
     var resolver = (AutofacWebApiDependencyResolver)config.DependencyResolver; 
     return resolver.Container; 
    } 
} 

コントローラは次のようになります。

[BotAuthentication] 
public class MessagesController : ApiController 
{ 
    // TODO: "service locator" 
    private readonly ILifetimeScope scope; 
    public MessagesController(ILifetimeScope scope) 
    { 
     SetField.NotNull(out this.scope, nameof(scope), scope); 
    } 

    /// <summary> 
    /// POST: api/Messages 
    /// Receive a message from a user and reply to it 
    /// </summary> 
    public async Task<HttpResponseMessage> Post([FromBody]Activity model, CancellationToken token) 
    { 

     // one of these will have an interface and process it 
     switch (model.GetActivityType()) 
     { 
      case ActivityTypes.Message: 

       try 

       { 

        // Create our conversation 
        await Conversation.SendAsync(model,() => scope.Resolve<PiiiCKDialog>()); 
       } 
       catch (Exception ex) 
       { 

       } 

       break; 
      case ActivityTypes.ConversationUpdate: 
      case ActivityTypes.ContactRelationUpdate: 
      case ActivityTypes.Typing: 
      case ActivityTypes.DeleteUserData: 
      default: 
       Trace.TraceError($"Unknown activity type ignored: { model.GetActivityType() }"); 
       break; 
     } 

     return new HttpResponseMessage(HttpStatusCode.Accepted); 
    } 
} 

しかし、私は自分のアプリケーションを実行すると、私はこのエラーを取得する:

'PiiiCKBot.Business.PiiiCKDialog' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.

私の知る限り、私は私のコンポーネントを登録午前。誰かがこれがなぜ機能していないのか何か手がかりがありますか?

答えて

関連する問題