Прежде чем я начну, я скажу следующее: у меня есть для расширения DataContext
в моем хранилище, потому что я вызываю хранимые процедуры, а ExecuteMethodCall
доступен только для внутреннего использования . Многие люди, кажется, этого не знают, поэтому, пожалуйста, не говорите «просто не расширяйте DataContext».
Я только начал использовать Windsor в качестве своего контейнера IoC. Мой контроллер с радостью делает следующее:
public ContractsControlController(IContractsControlRepository contractsControlService)
{
_contractsControlRepository = contractsControlService;
}
Но мой репозиторий должен иметь этот конструктор:
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
Но есть контейнер IoC, позволяющий вам указать строки подключения для вашего хранилища в файле web.config. Как должен выглядеть мой конструктор в репозитории для этого? Если я не укажу тот, который я показал, то он будет жаловаться, что нет конструкторов, которые бы принимали нулевые аргументы.
Приветствия
EDIT
В global.asax.cs
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());
WindsorControllerFactory.cs (в корне)
public class WindsorControllerFactory : DefaultControllerFactory
{
WindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes() where typeof(IController).IsAssignableFrom(t) select t;
foreach (Type t in controllerTypes)
{
container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
}
}
protected IController GetControllerInstance(Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
Но container
не нужен, если в web.config ничего не происходит?