在开始之前,我会说:我必须在我的存储库中进行扩展DataContext
,因为我正在调用存储过程并且ExecuteMethodCall
只能在内部使用。很多人似乎并不知道这一点,所以请不要说“只是不要扩展 DataContext”。
我刚刚开始使用 Windsor 作为我的 IoC 容器。我的控制器很乐意执行以下操作:
public ContractsControlController(IContractsControlRepository contractsControlService)
{
_contractsControlRepository = contractsControlService;
}
但是我的存储库必须有这个构造函数:
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
但是 IoC 容器可以让您在 web.config 中为您的存储库指定连接字符串。为了做到这一点,我在存储库中的构造函数必须是什么样的?如果我没有指定我展示的那个,那么它会抱怨没有构造函数接受零参数。
干杯
编辑
在 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 中没有任何内容,则不需要?