0

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

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

由于此类负责应用程序初始化的某些部分,因此我在构造时没有一些必需的类依赖项可用,因此我无法像通常遵循 IoC 那样在构造函数中传递它们。

我无法修改 Register 方法,因为这意味着更改作为第 3 方的接口。

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

{
    IRequiredService requiredService;

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

然后我不能模拟RequiredService 到UnitTest 类。我正在使用 Unity,并且我在课堂上有可用的容器,但我看不出它对我有什么帮助。

任何帮助将不胜感激。

4

2 回答 2

4

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

就像是:

private readonly Func<IRequiredService> serviceCreator;

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

然后在Register()

public void Register()
{
    this.requiredService = serviceCreator();
}
于 2013-06-20T07:48:23.320 回答
1

你可以改用属性注入吗?

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

    public void Register()
    {}
}

我想我更喜欢马修的方法!

干杯

于 2013-06-20T07:53:42.903 回答