C# Castle未使用TypedFactory解析子依赖项
我有一个接口用于使用Castle的TypedFactoryFacility的工厂,该工厂使用字符串C# Castle未使用TypedFactory解析子依赖项,c#,dependency-injection,castle-windsor,C#,Dependency Injection,Castle Windsor,我有一个接口用于使用Castle的TypedFactoryFacility的工厂,该工厂使用字符串 public interface IFoo<T> {} public interface IBar1 : IFoo<IBar1> {} public interface IBar2 : IFoo<IBar2> {} public class MyClass1 : IBar1 {} public class MyClass2 : IBar2 {} public
public interface IFoo<T> {}
public interface IBar1 : IFoo<IBar1> {}
public interface IBar2 : IFoo<IBar2> {}
public class MyClass1 : IBar1 {}
public class MyClass2 : IBar2 {}
public interface IFactory<T> where T : IFoo<T>
{
T Create(string primitive2);
}
我希望基于IFoo在给定的名称空间中安装所有MyClass,但我希望IBar接口请求并解析实例。因此,两个接口都必须注册并解析为同一类的同一实例
以下是我的安装程序代码:
// register foo
container.Register(
Classes.FromAssemblyContaining(typeof(IFoo<>))
.InSameNamespaceAs(typeof(IFoo<>))
.WithServiceAllInterfaces()
.LifeStyleHybridPerWebRequestTransient());
// register factory
container.Register(
Component.For(typeof(IFactory<>)).AsFactory()
.LifeStyle.HybridPerWebRequestTransient());
// register sub dependency
container.Register(
Component.For<ISubDependency>().ImplementedBy<SubDependency>()
.LifeStyle.HybridPerWebRequestTransient()
.DependsOn(new
{
primitive1 = "this resolves"
}));
我让它工作起来了,虽然这看起来像是一个可怕的黑客,所以如果能得到一些指导就太好了 我将IFoo注册更改为:
container.Register(
Classes.FromAssemblyContaining(typeof(IFoo<>))
.InSameNamespaceAs(typeof(IFoo<>))
.WithServiceAllInterfaces()
.LifeStyleHybridPerWebRequestTransient()
.Configure(r => r.DynamicParameters((k, d) =>
{
var subDependency = k.Resolve<ISubDependency>(d);
d.Add("subDepedency", subDependency);
})));
container.Register(
类.FromAssemblyContaining(typeof(IFoo))
.InSameNamespaceAs(类型(IFoo))
.WithServiceAllInterfaces()
.Lifestyle HybridPerWebRequestTransient()
.Configure(r=>r.DynamicParameters)((k,d)=>
{
var子相关性=k.Resolve(d);
d、 添加(“子依赖项”,子依赖项);
})));
这很有效,但我不喜欢,我希望有更好的方法。这要求所有具有子依赖项作为依赖项的类都将其命名为“子依赖项”,例如:
public class MyClass1 : IBar1
{
public MyClass1(SubDependency subDependency) // <-- MUST be named that.
}
公共类MyClass1:IBar1
{
public MyClass1(SubDependency SubDependency)/我让它开始工作了,尽管它看起来像是一个可怕的黑客,所以如果能得到一些指导就太好了
我将IFoo注册更改为:
container.Register(
Classes.FromAssemblyContaining(typeof(IFoo<>))
.InSameNamespaceAs(typeof(IFoo<>))
.WithServiceAllInterfaces()
.LifeStyleHybridPerWebRequestTransient()
.Configure(r => r.DynamicParameters((k, d) =>
{
var subDependency = k.Resolve<ISubDependency>(d);
d.Add("subDepedency", subDependency);
})));
container.Register(
类.FromAssemblyContaining(typeof(IFoo))
.InSameNamespaceAs(类型(IFoo))
.WithServiceAllInterfaces()
.Lifestyle HybridPerWebRequestTransient()
.Configure(r=>r.DynamicParameters)((k,d)=>
{
var子相关性=k.Resolve(d);
d、 添加(“子依赖项”,子依赖项);
})));
这是可行的,但我不喜欢,我希望有更好的方法。这要求所有具有子依赖项作为依赖项的类都将其命名为“子依赖项”,例如:
public class MyClass1 : IBar1
{
public MyClass1(SubDependency subDependency) // <-- MUST be named that.
}
公共类MyClass1:IBar1
{
public MyClass1(SubDependency SubDependency)//即使这个答案有效,我还是决定走另一条路,并可能最终创建一个新问题。即使这个答案有效,我也决定走另一条路,并可能最终创建一个新问题。
public class MyClass1 : IBar1
{
public MyClass1(SubDependency subDependency) // <-- MUST be named that.
}