在这种情况下如何做适当的IoC?

时间:2013-06-20 07:40:16

标签: c# unit-testing inversion-of-control ioc-container

我有以下类实现第三方接口:

public class RegistrationService : IRegistrationService
{
    public void Register()
    {
        ....
    }
}

由于这个类负责应用程序初始化的某些部分,所以在构造时没有一些必需的类依赖项,所以我不能像通常在IoC之后那样在构造函数中传递它们。

我无法修改Register方法,因为这意味着要更改第三方接口。

如果我在Register方法中创建我需要的依赖项,如:

{
    IRequiredService requiredService;

    public void Register()
    {
        this.requiredService = new RequiredService();
    }
}

然后我无法模拟ClassT的ClassService。我正在使用Unity,我在课堂上有容器,但我不知道它对我有什么帮助。

任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:3)

您可以将构造函数传递给工厂委托,您可以在需要时使用它来创建RequiredService

类似的东西:

private readonly Func<IRequiredService> serviceCreator;

public RegistrationService(Func<IRequiredService> serviceCreator)
{
    this.serviceCreator = serviceCreator;
    ...

然后在Register()

public void Register()
{
    this.requiredService = serviceCreator();
}

答案 1 :(得分:1)

您可以使用属性注入吗?

public class RegistrationService : IRegistrationService
{
    [Dependency]
    public IRequiredService RequiredService { get; set; };

    public void Register()
    {}
}

认为我更喜欢马修的方法!

干杯