我正在创建一个范围为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 2011-05-04 13:20:28
@Steven:我用完整的代码更新了UnitOfWorkAttibute类,但是,尽管你根据这个http://groups.google.com/group/structuremap-users/browse_thread/thread/f5d2ca90dae4017e/0323e2175a3ec020?lnk=raot&pli=1帖子(杰里米米勒回答),这张海报试图完成几乎相同的事情有他无法访问的情况,Jeremy似乎表明这是可能的。 – pghtech 2011-05-04 13:37:30
据我所知,链接到的线程没有提及属性。您想要在属性中注入属性。 – Steven 2011-05-04 13:45:55