Tag: castle

城堡IOC – 解决循环引用

我的MVP实施的快速问题: 目前我有以下代码,其中演示者和视图都通过容器解析。 然后,演示者调用View.Init将自己传递给视图。 我想知道是否有办法让容器修复我的循环引用(视图 – >演示者,演示者 – >视图)。 class Presenter : IPresenter { private View _view; public Presenter(IView view, …){ _view = view; _view.Init(this) } } class View : IView { private IPresenter _presenter; public void Init(IPresenter presenter){ _presenter = presenter; } } 亲切的问候 弗雷德里克

Unity工厂注射

我有一个类似下面的界面,我注入了统一容器。 public interface IMyInstanceFactory { IEnumerable GetAll(); } 所有IMyInstance在运行时之前都是已知的,即它们可以在引导程序中设置并且可以从统一检索。 我对IMyInstanceFactory具体实现如下: public class MyInstanceFactory:IMyInstanceFactory { IUnityContainer _container; public MyInstanceFactory(IUnityContainer container) { _container = container; } public IEnumerable GetAll() { return _container.ResolveAll(); } } ..在我的引导程序中,我做了这样的事情: container.RegisterType; container.RegisterType; container.RegisterType; container.RegisterType; 这很好地解决了一切。 但是,我不想依赖于容器或者为此实现IMyInstanceFactory ,有没有办法在没有实现IMyInstanceFactory情况下设置它? Unity是否为此提供了便利? 这种东西…… container.RegisterTypefactory.GetAll()>().IsResolvedBy(unity.ResolveAll); 我知道城堡可以做到这一点,Unity可以做类似的事吗?

将参数传递给Castle Windsor中的UsingFactoryMethod

如何将动态参数传递给UsingFactoryMethod注册? 例如,我想写一些类似的东西: container.Register( Component.For() .UsingFactoryMethod(return DoSomethingAndReturnInstance(paremeter))); 我需要在运行时发送参数,如下所示: container.Resolve(new { parameter = value }); 怎么做到呢?

System.InvalidProgramException在Microsoft安全更新MS13-004之后在MSTest中执行unit testing时

在2013年1月8日应用Microsoft安全更新http://technet.microsoft.com/en-us/security/bulletin/ms13-004后,我们已经开始在我们的构建服务器和本地的CI构建中遇到故障在我们的开发盒上运行测试。 我们得到一个System.InvalidProgramException:公共语言运行时检测到一个无效的程序 。 这仅在使用使用Castle Windsor DynamicProxy的MSTest运行测试时才会发生,尽管我不相信DynamicProxy在这里有问题。 下面将生成一个生成exception的示例代码。 [TestMethod] public void ShouldBeAbleToGenerateADynamicProxyForAnObject() { var container = new WindsorContainer(); container.Register(Component.For()); container.Register(Component.For() .Instance(new TestDependency(“Called from test framework.”)) .LifeStyle.Transient); container.Register(Component.For() .ImplementedBy() .Interceptors(InterceptorReference.ForType()) .Anywhere .LifeStyle.Transient); var service = container.Resolve(); Assert.AreEqual(“Called from test framework.”, service.MethodNumberOne()); } 这会生成一个堆栈跟踪,最终会在DynamicProxy中调用MixinData构造函数时抛出exception: Castle.DynamicProxy.MixinData..ctor(IEnumerable`1 mixinInstances)Castle.DynamicProxy.ProxyGenerationOptions.Initialize()Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(Type proxyTargetType,Type [] interfaces,ProxyGenerationOptions options)Castle.DynamicProxy.DefaultProxyBuilder。 CreateInterfaceProxyTypeWithTarget(Type interfaceToProxy,Type [] additionalInterfacesToProxy,Type targetType,ProxyGenerationOptions options)Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithTarget(Type interfaceToProxy,Type [] […]

拦截Ninject。 无法加载IProxyRequestFactory

我正在学习使用Ninject和Interceptor模式。 我有以下拦截器。 public class MyInterceptor:IInterceptor { public void Intercept(IInvocation invocation) { Console.WriteLine(“Pre Execute: ” + invocation.Request.Method.Name); foreach (var param in invocation.Request.Arguments) { Console.WriteLine(“param : ” + param); } invocation.Proceed(); Console.WriteLine(“Post Execute: ” + invocation.Request.Method.Name); Console.WriteLine(“Returned: ” + invocation.ReturnValue); } } 并且有一个名为MyClass的类,它只有2个简单的方法,虚拟以允许拦截器处理它们。 (两种方法是Echo和double,这就像他们的名字所说的那样。) 我通过NuGet将Ninject,Ninject.Extensions.Interception和Ninject.Extensions.Interception.DynamicProxy添加到我的项目中。 添加了以下using语句。 using Ninject; using Ninject.Extensions.Interception.Infrastructure.Language; using Ninject.Extensions.Interception; 我的Main方法,它执行引导看起来像这样。 static void Main(string[] args) […]

城堡动态代理创建

我正在实现一个设计,我的层将位于客户端和服务器之间,无论我从服务器获得什么对象,我都会将其包装在透明代理中并提供给客户端,这样我就可以跟踪对象中的更改,所以当保存它时,我只会发送更改的信息。 我查看了城堡动态代理,linfu,虽然他们可以生成代理类型,但他们不能接受现有的对象并换行。 想知道它是否可以使用这些框架,或者是否有任何其他框架可以实现这一点……

在类库中实例化Castle Windsor容器时的最佳做法是什么?

我想知道实例化温莎城堡容器的最佳位置在一个类库中。 我应该只在我正在使用的类的构造函数中执行它,还是有一个我不知道的程序集入口点? 谢谢。

Castle DynamicProxy:如何在代理接口时代理等于?

我需要使用Castle DynamicProxy通过向ProxyGenerator.CreateInterfaceProxyWithTarget提供它的实例来代理接口。 我还需要确保调用Equals,GetHashCode和ToString命中具体实例上的方法,我正在传递,而且我无法使其工作。 换句话说,我希望这个小样本打印True两次,而实际上它打印True,False : using System; using Castle.Core.Interceptor; using Castle.DynamicProxy; public interface IDummy { string Name { get; set; } } class Dummy : IDummy { public string Name { get; set; } public bool Equals(IDummy other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return Equals(other.Name, Name); } public override […]