繁体   English   中英

使用autofac解决动态对象创建(在另一个动态创建的对象内部)的问题

[英]Resolving dynamic object creation (inside another dynamically created object) with autofac

我正在尝试创建一个具有特定要求的模块(将使用Autofac Web窗体集成在一个简单的ASP站点中引用该模块)。 它应该返回使用一组特定规则创建的字符串。 这些规则由策略定义,每个“演员”都不同。 将在运行时根据来自请求的值来选择“演员”。 使事情变得更困难的是,某些“参与者”可以根据例如请求的国家/地区,对该策略进行不同且特定的实施。

我已经使用抽象工厂和具体工厂解决了这个问题(第一个工厂了解使用哪个“演员”具体工厂,第二个工厂确定我是否需要特定或通用的演员策略)。 问题在于,采用了高度模块化的设计后,我需要使用反射才能间接引用特定角色的策略类(否则,我应该引用包含所有特定策略实现的所有dll)。

我希望避免使用这种方法,主要是因为我想使用一种独特的方式来动态加载所需的组件。

我已经了解了一些Autofac的可能性,并且据我了解,我可以注册同一接口的不同实现,并按以下说明使用密钥解析它们( https://code.google.com/p/autofac / wiki / TypedNamedAndKeyedServices )。 问题是我不知道如何在我的抽象工厂和具体工厂中解决它们(我那里没有对解析器的引用……我认为我应该避免使用它)。

所以我的问题是:

1)在那种情况下如何使用Autofac? 最佳做法是什么(肯定我缺少一些巨大的东西)

2)我是否需要重新考虑该模块的所有设计? 我的意思是,我仍然需要使用抽象工厂和具体工厂吗?

3)谁能给我指出一些示例或教程,可能与我的问题有关?

非常感谢您的帮助,对于长期而又不清楚的问题,我们深表歉意。

一种可能的方法是将您的策略​​分为通用策略和特定于参与者的策略。 您已经在脑子里做到了,但是我不知道您的代码是否反映了这一点。

  • 有两个接口IActorSpecificStrategyIGenericStrategy
  • 将方法bool CanHandleActor(IActor actor)到两个接口(或两个派生自该接口的接口)。
  • 向工厂注入两个枚举:一个包含IActorSpecificStrategy ,另一个包含IGenericStrategy
  • 当请求演员的策略时,首先枚举所有IActorSpecificStrategy实例,并返回第一个CanHandleActor返回true实例。 否则,返回CanHandleActor返回true的第一个IGenericStrategy

如果这不适用于您的问题,请更详细地说明如何选择该策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM