Dependency injection 范围在温莎城堡类型工厂中丢失?
我在一个带有TypedFactoryFacility的容器中有以下温莎组件注册码:Dependency injection 范围在温莎城堡类型工厂中丢失?,dependency-injection,castle-windsor,typed-factory-facility,Dependency Injection,Castle Windsor,Typed Factory Facility,我在一个带有TypedFactoryFacility的容器中有以下温莎组件注册码: Component .For<IMyItemFactory>() .AsFactory(f => f.SelectedWith(new MyComponentSelector())) .LifestylePerWcfOperation(), Classes .FromAssembly(Assembly.GetExecutingAssembly()) .B
Component
.For<IMyItemFactory>()
.AsFactory(f => f.SelectedWith(new MyComponentSelector()))
.LifestylePerWcfOperation(),
Classes
.FromAssembly(Assembly.GetExecutingAssembly())
.BasedOn<IMyItem>()
.LifestylePerWcfOperation()
.Configure(c => c.Named(c.Implementation.Name)),
这很令人困惑,因为应用程序中几乎每个组件都有wcfooperation作用域,所以我不明白这是如何发生的。我甚至尝试记录每个注册的类型及其作用域,以断言IMyItem类具有wcfooperation作用域,而且它们具有
你知道如何调试这个吗
编辑:我正在从成功构造的对象调用工厂,该对象具有wcfooperation作用域,调用另一个wcfooperation作用域服务时不会出现问题:
public SomeDataProvider(IElasticsearchClient elasticClient, IMyItemFactory factory)
{
_elasticClient = elasticClient;
_factory = factory;
}
async Task SomeMethod()
{
var someString = await _elasticClient.SomeMethod(); // ok
var myItem = _factory.GetMyItem(someString); // exception from above
// ...
}
正如评论
操作上下文中提到的。当前的为null
,因此从技术上讲,温莎做了正确的事情-提醒您注意这一事实。您在哪里以及如何使用该工厂?我添加了使用说明。我想这个问题很难从远处回答——如果有一个答案能教会我如何调试这种情况,我会感到满意。正如我已经写过的,我唯一的想法是使用容器.Kernel.GetAssignableHandlers
调用断言自己所有东西都在同一个范围内。如果使用IMyItemFactory
和IMyItem
s的lifestyleperwcfooperation
替换LifestyleTransient
,它会正确解析IMyItem
s,但是我需要使用一些IMyItem
中的wcfooperation
作用域组件,所以很遗憾,这不是一个解决方案!非常感谢。就是这样,我想是这个错误:
public SomeDataProvider(IElasticsearchClient elasticClient, IMyItemFactory factory)
{
_elasticClient = elasticClient;
_factory = factory;
}
async Task SomeMethod()
{
var someString = await _elasticClient.SomeMethod(); // ok
var myItem = _factory.GetMyItem(someString); // exception from above
// ...
}