Unity:配置容器以多种方式解析为相同类型

罗纳德·埃默戈(Ronald Emergo)

考虑这些接口和类

interface IWorkflowService
{
    void FillContext(WFContext context, IWorkflowableEntity entity);
}

interface IDataService<Entity> 
{
}

abstract class DataService<TEntity>
{      
}

class EmployeeDataService : IWorkflowService, DataService<Employee>
{
}

class WorkflowHandler
{
    private IUnityContainer _container;

    public bool Handle(IWorklfowableEntity entity)
    {
        // now I want to resolve the correct IWorkflowService
        // suppose entity is an employee Entity
        // EmployeeDataService should be resolved
    }
}

//container definition:
container.RegisterType<IDataService<employee>, EmployeeDataService>();

在Workflhandler中,我想解析正确的IWorkflowService,这取决于给定实体的类型。

  1. 如何基于IWorkflowService和实体的Employee类型定义统一容器以获取EmployeeDataService?
  2. 我应该如何从Workflowhandler的Handle方法中调用它?

顺便说一句:也许我误将Unity用作服务定位器。如果是这种情况,我应该创建自己的服务定位器以获得正确的服务吗?

预先感谢您的任何想法和答案。

罗纳德·埃默戈(Ronald Emergo)

正如我所怀疑的那样,将统一容器用作服务定位器是不当行为。

相反,工作流处理程序类应依赖于工厂。当您编写横切特征并使用“依赖注入”时,通常需要这样做。

因此,WorkflowHandler看起来像这样:

class WorkflowHandler 
{
    private IWorkflowServiceFactory _wfsfactory

    public WorkflowHandler(IWorkflowServiceFactory workflowservicefactory)
    {
        _wfsfactory = workflowservicefactory;
    }

    public bool Handle(IWorklfowableEntity entity)
    {
        var svc = _wfsfactory.GetServiceByEntity(entity);
        var context = new WfContext();
        svc.FillContext(context, entity);

        //handle evaluate etc.
    }
}

服务工厂将如下所示:

class WorkflowServiceFactory : IWorkflowServiceFactory
{
    private IUnityContainer _container;

    public GetServiceByEntity(IWorkflowableEntity entity)
    {
        Type t = typeof(IDataService<>);
        Type fulltype = t.MakeGenericType(new [] { entity.GetType() });

        return _container.Resolve(fulltype);
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Symfony-相同类型的多种形式

来自分类Dev

Autofac解析相同类型的多个实例

来自分类Dev

为不同类型实现相同的功能

来自分类Dev

强制多态参数为相同类型

来自分类Dev

如何使用Make以相同的方式编译多种文件类型

来自分类Dev

如何使用Make以相同的方式编译多种文件类型

来自分类Dev

将具有不同类型且继承相同类的对象存储在容器中

来自分类Dev

在页面上为所有相同类型的类编号

来自分类Dev

Java:将“ this”实例设置为相同类型的对象

来自分类Dev

将字符串解析为不同类型

来自分类Dev

Unity 容器 - 解析始终相同构造函数参数的对象

来自分类Dev

多种方式解析数据框

来自分类Dev

仅声明与该类中的类具有相同类型的容器

来自分类Dev

Unity容器尝试解析未注册的类型,引发错误

来自分类Dev

Unity 容器将如何解析已注册的类型

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

转换为相同类型

来自分类Dev

相同类型的多个@ManagedProperty

来自分类Dev

对于情况N = 1,以兼容方式使用相同类型的多个注释

来自分类Dev

内存效率更高的方式来定义许多相同类型的对象

来自分类Dev

在plpgsql中是否有任何快捷方式来声明多个相同类型的变量?

来自分类Dev

惯用的方式来存储两个相同类型的相关值

来自分类Dev

为所有值都具有相同类型的对象定义类型

来自分类Dev

列表的类型别名在擦除后结果为相同类型

来自分类Dev

将Moq模拟对象注册为Unity容器的类型

来自分类Dev

两次注册相同类型并仅解决单例的Unity行为

来自分类Dev

使用eclipse外部工具配置复制相同类型的所有文件

来自分类Dev

从多个配置文件创建的ClassPathXmlApplicationContext覆盖具有相同类型和不同ID的bean

来自分类Dev

如何在argparse中指定相同类型的父解析器的多个实例

Related 相关文章

  1. 1

    Symfony-相同类型的多种形式

  2. 2

    Autofac解析相同类型的多个实例

  3. 3

    为不同类型实现相同的功能

  4. 4

    强制多态参数为相同类型

  5. 5

    如何使用Make以相同的方式编译多种文件类型

  6. 6

    如何使用Make以相同的方式编译多种文件类型

  7. 7

    将具有不同类型且继承相同类的对象存储在容器中

  8. 8

    在页面上为所有相同类型的类编号

  9. 9

    Java:将“ this”实例设置为相同类型的对象

  10. 10

    将字符串解析为不同类型

  11. 11

    Unity 容器 - 解析始终相同构造函数参数的对象

  12. 12

    多种方式解析数据框

  13. 13

    仅声明与该类中的类具有相同类型的容器

  14. 14

    Unity容器尝试解析未注册的类型,引发错误

  15. 15

    Unity 容器将如何解析已注册的类型

  16. 16

    相同类型的多个@ManagedProperty

  17. 17

    转换为相同类型

  18. 18

    相同类型的多个@ManagedProperty

  19. 19

    对于情况N = 1,以兼容方式使用相同类型的多个注释

  20. 20

    内存效率更高的方式来定义许多相同类型的对象

  21. 21

    在plpgsql中是否有任何快捷方式来声明多个相同类型的变量?

  22. 22

    惯用的方式来存储两个相同类型的相关值

  23. 23

    为所有值都具有相同类型的对象定义类型

  24. 24

    列表的类型别名在擦除后结果为相同类型

  25. 25

    将Moq模拟对象注册为Unity容器的类型

  26. 26

    两次注册相同类型并仅解决单例的Unity行为

  27. 27

    使用eclipse外部工具配置复制相同类型的所有文件

  28. 28

    从多个配置文件创建的ClassPathXmlApplicationContext覆盖具有相同类型和不同ID的bean

  29. 29

    如何在argparse中指定相同类型的父解析器的多个实例

热门标签

归档