В Unity 2, если вы пытаетесь заменить одну регистрацию на другую, вам необходимо указать как тип От, так и Кому в новой регистрации, если они были включены в исходную регистрацию.
Например, если у вас есть:
public interface IService
{
void DoSomething();
}
public class SomeService : IService
{
public void DoSomething();
}
public class AnotherService : IService
{
public void DoSomething();
}
и вы регистрируете SomeService как:
container.RegisterType<IService, SomeService>();
тогда, если другая часть вашей системы хочет переопределить регистрацию IService для разрешения AnotherService, вам нужно зарегистрировать его как:
<code>
container.RegisterType<IService, AnotherService>();
Это кажется довольно простым, но я зациклился на нем, когда нужно было создать AnotherService на фабрике:
container.RegisterType<IService>(new InjectionFactory(x =>
{
// this would be some complicated procedure
return new AnotherService();
}));
В этом случае вы все равно получите SomeService. Чтобы получить другой сервис, который вы ожидаете, вам нужно указать тип TTo:
container.RegisterType<IService, AnotherService>(new InjectionFactory(x =>
{
return new AnotherService();
}));