【问题标题】:bot framework and repositry design pattern dependency injectionbot 框架和存储库设计模式依赖注入
【发布时间】:2017-05-22 21:24:30
【问题描述】:

我正在使用 Luis 和 Luis Action Binding 创建一个机器人应用程序,如下例所示 Luis action binding sample on GitHub

我想使用依赖注入将数据服务实例传递给动作绑定

我按照这样的存储库设计模式添加了一个数据层:

public class ProviderService : IProviderService
{
    private readonly IProviderRepository ProviderRepository;
    private readonly IUnitOfWork UnitOfWork;

    public ProviderService(IProviderRepository providerService, IUnitOfWork unitOfWork)
    {
        this.ProviderRepository = providerService;
        this.UnitOfWork = unitOfWork;
    }

    public void CreateProvider(Provider provider)
    {
        ProviderRepository.Add(provider);
    }

并且会像这样在动作绑定类中的完成方法中使用它

 public class FindNumberAction : BaseLuisAction
{
    IProviderService _provider;

    [Required(ErrorMessage = "Please provide a ProviderName")]
    public string Provider { get; set; }

    public string ProviderType { get; set; }

    public FindNumberAction() : this(new ProviderService(new ProviderRepository(new DbFactory()), new UnitOfWork(new DbFactory())))
    {

    }

    public FindNumberAction(IProviderService provider)
    {
        _provider = provider;
    }

    public override Task<object> FulfillAsync()
    {
        var providerData = _provider.GetByProviderName(Provider);
        if (!string.IsNullOrEmpty(providerData.ProviderAddress))
        {
            var result = new ProviderInfo
            {
                ProviderAddress = providerData.ProviderAddress,
                ProviderName = providerData.Provider.ProviderName,
                ProviderPhone = providerData.ProviderPhone,
                ProviderType = providerData.Provider.ProviderType.ProviderTypeName
            };
            return Task.FromResult((object)result.GetNumber());
        }

        return Task.FromResult((object)new ProviderInfo() { ProviderName = Provider, ProviderType = ProviderType }.NoProviderNumberFound());
    }
}

【问题讨论】:

标签: c# dependency-injection botframework azure-language-understanding


【解决方案1】:

https://github.com/Microsoft/BotBuilder/tree/master/CSharp/Samples/AlarmBot

这是一个很好的例子,展示了如何在机器人框架中实现 AutoFac。您会看到,您不仅需要实现容器,还必须更改 MessagesController 处理传入消息的方式。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多