При разрешении службы средство разрешения зависимостей Autofac передает то же значение для параметров
Я использую Autofac для IoC в приложении ASP .Net MVC 4.
Я не могу понять, почему средство разрешения зависимостей передает одно и то же значение для разных параметров при разрешении зависимости.
Вот как я регистрируюсь:
private void RegisterDependencyResolver()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.Register(x => new AESCryptographyService()).As<ICryptographyService>();
builder.RegisterType<AppContext>().As<IContext>();
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Вот как я решаю IContext
:
var factory = _dependencyResolver.GetService<Func<string, string, string, IContext>>();
IContext context = factory(contextToken, hostUrl, request.Url.Authority);
Вот мой AppContext
:
internal class AppContext : IContext
{
public AppContext(string contextToken, string hostUrl, string appUrl)
{
AppUrl = appUrl;
HostUrl = hostUrl;
ContextToken = contextToken;
}
public string AppUrl { get; private set; }
public string ContextToken { get; private set; }
public string HostUrl { get; private set; }
}
Пожалуйста, посмотрите на этот скриншот. Даже если contextToken
, hostUrl
, а также request.Url.Authority
имеют разные значения, в конструкторе AppContext
все значения установлены в значение contextToken
,
1 ответ
Решение
Догадаться!
Я должен был заменить это:
var factory = _dependencyResolver.GetService<Func<string, string, string, IContext>>();
IContext context = factory(contextToken, hostUrl, request.Url.Authority);
с этим:
var context =
_dependencyResolver.RequestLifetimeScope.Resolve<IContext>(
new NamedParameter("contextToken", contextToken),
new NamedParameter("hostUrl", hostUrl),
new NamedParameter("appUrl", request.Url.Authority));