Я меня были пойти на это некоторое время не повезло :(Использование Autofac Реализовано с IDependencyResolver в MVC5
Где я застревания:
У меня есть веб-приложение MVC5 и Я использую Autofac для контейнера IoC под капотом. В основном у меня есть зависимость, которая требует от меня передать параметр через конструктор , но поскольку я разрешаю Autofac через интерфейс IDependencyResolver, мне не разрешено для вставки параметры непосредственно.
Я пытался использовать делегат завода, но им все еще получаю ошибки я уверен, что я должен делать что-то не так ....
////////////////
//My Interface//
////////////////
public interface IConfiguration
{
string OwnerId { get; set; }
IDictionary<string, string> GetAllSettings();
string GetSettingByKey(string SettingsKey);
}
///////////////////
//My Concrete Obj//
///////////////////
public class Configuration : IConfiguration
{
public delegate Configuration Factory(string ownerId); //Added this based on what's on the Autofac Wiki - Delegate Factories
public string OwnerId { get; set; }
public Dictionary<string, string> AllSettings {get; set;}
public Configuration(string ownerId) {
//Some logic that requires ownerId
}
public IDictionary<string, string> GetAllSettings()
{
//Some other logic irrelevant for now
}
public string GetSettingByKey(string settingsKey)
{
//Some other logic irrelevant for now
}
}
///////////////////////////////////
//Registering Dependencies in MVC//
///////////////////////////////////
var builder = new ContainerBuilder();
builder.RegisterType<Configuration>().As<IConfiguration>();
//Some other configuration
var container = builder.Build();
//Set Dependency Resolver for MVC5
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
//////////////////////////////////////////////////////////
//Somewhere in my MVC App where I require IConfiguration//
//////////////////////////////////////////////////////////
var ownerId = GetOwnerId();
//Where I require Help
var config = DependencyResolver.Current.GetService<IConfiguration>(); //How do I pass in a parameter (ownerId) to my underlying autofac container?
//I Tried this but it didn't work
var configFactory = DependencyResolver.Current.GetService<Func<string,IConfiguration>>();
var config = configFactory.Invoke(ownerId);
YSOD Я получаю идет о так
ни один из конструкторов, найденных с «Autofac.Core.Activators.Reflection.DefaultConstructorFinder» на «» Common.Configuration типа не могут использоваться с имеющимися услугами и параметрами: не удается разрешить параметр «System.String OwnerId» конструктора 'Void .ctor (System.String)'.
Заранее спасибо ребята :)
Мне нужно поместить Баунти на этот Do парни :)? –
Что такое 'ownerId'? Это что-то, что изменяется в зависимости от условий выполнения (например, входящего запроса или сеанса пользователя) или это то, что исправлено в течение всего срока службы вашего приложения (например, потому что оно настроено в файле конфигурации)? – Steven
Привет, Стивен, спасибо за вопрос да, что-то, что определено во время выполнения :) Я не могу разместить его в конфиге, пока он еще не известен ... –