2017-06-26 42 views
0

对不起,如果这是之前的答案,但我搜查,我没有找到我正在寻找什么,我不知道是否这是因为这是一种不好的做法,或者因为我不知道我的适当名称正在寻找。使Autofac根据某些参数返回实现相同接口的不同类?

我有这样的情况:我有一个邮件服务使用不同的提供者,具体取决于客户想要哪一个。客户可能希望通过UPS,DHL,FedEx或USPost发送邮件。他们每个人都会实现IMailing

public interface IMailing 
{ 
    void Mail(string message); 
} 

public class UPS : IMailing 
{ 
    public void Mail(string message) 
    { 
     Console.WriteLine(message + ", mailed with UPS!"); 
    } 
} 

public class DHL : IMailing 
{ 
    public void Mail(string message) 
    { 
     Console.WriteLine(message + ", mailed with DHL!"); 
    } 
} 

... 

我想根据一些参数得到每个具体的实施IMailing。说一个字符串,我将传递给Autofac,根据该字符串键,它将返回一个UPS,DHL,FedEx等实例。

有没有办法做到这一点?可以吗?

谢谢。

回答

2

您可以使用命名或键控服务。见Named and Keyed Services

注册

builder.RegisterType<UPS>().Named<IMailing>("ups"); 
builder.RegisterType<DHL>().Named<IMailing>("dhl"); 

检索

var r = lifeTimeScope.ResolveNamed<IMailing>("dhl"); 

或者你可以注入基于名称或关键字的查找到您的使用类型而不是注射的ILifeTimeScope

相关问题