【发布时间】:2023-03-17 10:32:01
【问题描述】:
我正在创建一个范围为 HTTPContextScoped 的类型的实例。我试图弄清楚如何将此特定实例注入到我无法控制的同一类型的属性中。
我想将 UnitOfWork 的 特定 实例注入到属性中的 IUnitOfWork 类型的属性中(参见下面的代码)
这是我所指部分的 ObjectFactory.Initialize() 方法:
ObjectFactory.Initialize(x =>
{
//...
//additional content
//...
x.For<IUnitOfWork>()
.HttpContextScoped()
.Use(context => new UnitOfWork(
context.GetInstance<ISessionFactory>()));
x.SetAllProperties(context =>
{
context.Matching(p =>
p.DeclaringType == typeof(UnitOfWorkAttribute));
context.OfType<IUnitOfWork>();
});
属性类:
public class UnitOfWorkAttribute : ActionFilterAttribute {
public IUnitOfWork UnitOfWork { get; set; }
public UnitOfWorkAttribute() {
Order = 0;
}
public void OnActionExecuting(ActionExecutingContext filterContext) {
UnitOfWork.Begin();
}
public void OnActionExecuted(ActionExecutedContext filterContext) {
UnitOfWork.End();
}
}
我试图按照 Jeremy Miller 的一个例子使用标准来做到这一点,但我做的不对。
对我做错了什么有什么想法吗?
注意它确实创建了 UnitOfWork 实例,因为我在其他地方使用它,但我特别不正确(或根本不)将该属性的属性注入该实例(或任何与此相关的)。
【问题讨论】:
-
您不能对属性使用依赖注入,因为属性是由 .NET 框架创建和控制的。如果您展示更多您正在做的事情(例如您的
UnitOfWorkAttribute代码),我们可能会提供替代解决方案。 -
@Steven:我已经用完整的代码更新了 UnitOfWorkAttibute 类。但是,尽管您根据此groups.google.com/group/structuremap-users/browse_thread/thread/… 帖子(由 Jeremy Miller 回答)说了什么,但发帖人正试图通过他无法访问的实例来完成几乎相同的事情,而 Jeremy 似乎在说这是可能的。跨度>
-
据我所知,您链接到的线程没有提及属性。你想在属性中注入一个属性。
标签: c# asp.net-mvc-3 dependency-injection structuremap