在StructureMap中有条件地获取实例

Arn*_*kas 6 .net c# structuremap inversion-of-control

我有一个接口IFileSystemStructureEvaluator,它有两个具体的实现:NtfsFileSystemStructureEvaluatorFtpFileSystemStructureEvaluator.

我希望能够请求适当的IFileSystemStructureEvaluator,具体取决于传递给构造函数的Uri是否是FTP uri的文件uri.

我怎样才能在StructureMap中实现这一点?

谢谢

Chr*_*sal 3

您应该查看Jeremy Miller 的条件对象构建帖子。它允许您使用一些条件检查来确定您将获得的实例。这听起来像是解决你的问题的方法。

http://codebetter.com/blogs/jeremy.miller/archive/2009/01/18/conditional-object-construction-in-structuralmap-ie-fun-with-lambdas.aspx

编辑如下

StructureMap 用户列表上有几个关于条件构造的问题(即,如果满足此条件,则返回此对象,否则返回此其他对象)。为了满足这一明显的需求,StructureMap 2.5.2 引入了新的 ConditionalInstance,它允许用户根据 Predicate 布尔测试有效地切换活动实例。以下是使用 InstanceExpression 的新 Conditional() 语法的快速示例:

var container = new Container(x =>
{
    x.InstanceOf<Rule>().Is.Conditional(o =>
    {
        o.If(c => false).ThenIt.Is.OfConcreteType<ARule>();
        o.If(c => true).ThenIt.IsThis(GREEN);
        o.TheDefault.IsThis(RED);
    }).WithName("conditional");
});
Run Code Online (Sandbox Code Playgroud)

更多信息请参见回程机 https://web.archive.org/web/20090506031557/http://codebetter.com/blogs/jeremy.miller/archive/2009/01/18/conditional-object-construction-in-结构图-ie-fun-with-lambdas.aspx