J'essaie de résoudre des instances en utilisant Autofac KeyFilter. Je reçois des résultats si explicitement résoudre les instances en utilisant ResolveKeyed <>. Cependant, lorsque vous utilisez KeyFilter dans Constructor, différentes instances sont résolues en tant que paramètres.Key Filter Constructor Utilisation Autofac Problème
est ici le petit exemple .. je suis venu ..
public enum TestApiEnum
{
TestA,
TestB
}
public interface ITestService
{
}
public interface ITestApi
{
}
public class TestService : ITestService
{
public TestService([KeyFilter(TestApiEnum.TestA)]ITestApi testApiA,
[KeyFilter(TestApiEnum.TestB)] ITestApi testApiB)
{
}
}
public class TestApiA : ITestApi
{
public TestApiA(TestApiEnum testEnum)
{
TestApiEnum = testEnum;
}
public TestApiEnum TestApiEnum { get; set; }
}
public class TestApiB: ITestApi
{
public TestApiB(TestApiEnum testEnum)
{
TestApiEnum = testEnum;
}
public TestApiEnum TestApiEnum { get; set; }
}
Builder Inscription
builder.RegisterType<TestService>()
.As<ITestService>();
builder.RegisterType<TestApiA>()
.AsImplementedInterfaces()
.Keyed<ITestApi>(TestApiEnum.TestA)
.WithAttributeFiltering()
.WithParameter("testEnum", TestApiEnum.TestA);
builder.RegisterType<TestApiB>()
.AsImplementedInterfaces()
.Keyed<ITestApi>(TestApiEnum.TestB)
.WithAttributeFiltering()
.WithParameter("testEnum", TestApiEnum.TestB);
var builder = AutofacConfig.ConfigureContainer();
using (var scope = builder.BeginLifetimeScope())
{
// Able to Resolve following two..
var testApiA = scope.ResolveKeyed<ITestApi>(TestApiEnum.TestA);
var testApiB = scope.ResolveKeyed<ITestApi>(TestApiEnum.TestB);
// following test service resolves both parameters as **testApiB** and **testApiB**
var testservice = scope.Resolve<ITestService>();
}