gpt4 book ai didi

asp.net-mvc - Project Windsor - 存储库扩展 DataContext

转载 作者:行者123 更新时间:2023-12-04 07:02:03 27 4
gpt4 key购买 nike

在我开始之前,我会说:我必须扩展 DataContext在我的存储库中,因为我正在调用存储过程和 ExecuteMethodCall仅在内部可用。很多人似乎并不知道这一点,所以请不要说“只是不要扩展DataContext”。

我刚刚开始使用 Windsor 作为我的 IoC 容器。我的 Controller 很高兴地执行以下操作:

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 中没有任何内容,则不需要?

最佳答案

David Kemp 的建议很简洁,但不是类型安全的。一种更复杂但类型安全的方法是使用工厂方法。

假设 ContractsControlRepository 类已更改为在其构造函数中采用连接字符串。在这种情况下,你可以这样写:

var connectionString = 
ConfigurationManager.ConnectionStrings
["AccountsConnectionString"].ConnectionString;

var container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
container.Register(Component
.For<IContractsControlRepository>()
.UsingFactoryMethod(k => new ContractsControlRepository(connectionString)));

请注意,在 UsingFactoryMethod 方法起作用之前,有必要将 FactorySupportFacility 添加到容器中。

关于asp.net-mvc - Project Windsor - 存储库扩展 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1701030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com