Tag: dependency injection

当你没有对容器的引用时,是否有可能让Castle Windsor解决属性依赖性问题?

我们有一个解决方案,其中有多个项目代表我们的应用程序层。 例如 域 数据 逻辑 WebUI中 我们的Castle Windsor容器从我们的Web层引用,然后我们将这些依赖项级联到层。 例如… // In Domain public interface IFooRepository { void DoSomething(); } // In Data public class FooRepository : IFooRepository { public void DoSomething() { // Something is done } } // In Logic public class MyThingManager { private readonly IFooRepository fooRepository; public MyThingManager(IFooRepository fooRepository) { this.fooRepository = […]

如何在下游生成新的Windows窗体时使用DI?

我有Unity DI容器最初使用我的Windows窗体应用程序。 在Program.cs我有以下内容: static void Main() { var container = BuildUnityContainer(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(container.Resolve()); } private static IUnityContainer BuildUnityContainer() { var container = new UnityContainer(); container.RegisterType(); container.RegisterType(); return container; } 在我的MainForm构造函数中,我有以下工作 : private readonly ITest test; public MainForm(ITest test) { this.test = test; InitializeComponent(); } 容器已解析,代码工作正常。 问题/问题是,我如何从MainForm实例化一个新表单,比如具有以下构造函数的Form2 : private readonly ISomeOtherTest someOtherTest; public Form2(ISomeOtherTest someOtherTest) […]

如何在autofac中混合装饰器?

我希望能够将装饰器与Autofac混合搭配。 例如,假设我有一个由Repository类实现的IRepository接口。 我可以拥有以下装饰器:RepositoryLocalCache,RepositoryDistributedCache,RepositorySecurity,RepositoryLogging …,你得到了ideea。 基于配置设置,我想用所需的装饰器来装饰基本实现。 那可以是无,一个或多个装饰器。 我熟悉注册一个装饰器的语法,或者按固定顺序注册它们的链,但我怎样才能使这个动态化呢?

Simple Injector:在基类中注入属性

几周以来,我一直在使用Simple Injectordependency injection容器,取得了巨大的成功。 我喜欢简单的配置它。 但现在我有一个我不知道如何配置的设计。 我有一个基类,其中有许多类型派生,我想将dependency injection基类的属性,但不必为每个派生类配置。 我尝试使用属性执行此操作,但Simple Injector不支持属性。 这是我设计的精简版。 public interface Handler where TMessage : Message { void Handle(TMessage message); } public abstract class BaseHandler { // This property I want to inject public HandlerContext Context { get; set; } } // Derived type public class NotifyCustomerHandler : BaseHandler, Handler { public NotifyCustomerHandler(SomeDependency dependency) […]

删除ASP.Net核心dependency injection中的服务

在Asp.Net MVC Core(早期版本,版本1.0或1.1)中,dependency injection绑定在Startup.cs类中配置如下: public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddScoped(); // … } } 在我的应用程序中,我通常有一个基本的Startup类,其中generics绑定被定义为这些行的序列: public abstract class BaseStartup { public virtual void ConfigureServices(IServiceCollection services) { services.AddScoped(); services.AddScoped(); } } 然后在我的应用程序中,我inheritance了启动类,并注入了其他服务: public class Startup : BaseStartup { public override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); services.AddScoped(); services.AddScoped(); } } 我现在想知道:我怎样才能“覆盖”以前的绑定? 例如,我希望删除或修改基类中定义的绑定,如: services.Remove(); […]

Custom MembershipProvider:没有为此对象定义的无参数构造函数

我有一个自定义MembershipProvider类,它inheritance自MembershipProvider,它带有两个参数: public class CustomMembershipProvider : MembershipProvider { private readonly ISecurityRepository _securityRepository; private readonly IUserRepository _userRepository; public CustomMembershipProvider(ISecurityRepository securityRepository, IUserRepository userRepository) { … } public override MembershipUser GetUser(string username, bool userIsOnline) { … } … etc } 这个配置文件看起来类似于: 这在我的Web应用程序中主要用于登录和注销。 我正在使用Unity for DI并在我的Boostrapper.cs类中设置必要的类。 但是,当我想创建一个自定义User类并调用Membership.GetUser方法时,我最近遇到了一个问题。 当我这样做时,我得到以下exception: {“No parameterless constructor defined for this object. (C:\\*app path*\\web.config line 43)”} 我的配置文件中的第43行指向我上面发布的自定义成员资格提供程序。 […]

Simple Injector – 使用相同generics类型的另一个依赖项注册装饰器

我想我在Simple Injector的RegisterDecorator()偶然发现了一个怪癖。 它甚至出现在最近的2.5.0中。 我有一种情况,我想装饰一个封闭的generics类型,例如ICommandHandler ,一个装饰器(通过构造函数注入)一个类型为ICommandHandler的内部处理程序,还有另一种类型的处理程序,比如ICommandHandler 。 尽管这些命令处理程序类型是不同的,但是当我在这样的装饰器类型上调用RegisterDecorator时,SimpleInjector似乎会混淆并引发exception: ArgumentException:为了使容器能够使用MessageLogger作为装饰器,其构造函数必须包含ICommandHandler类型的单个参数(或Func<ICommandHandler> ) – 即正在装饰的实例的类型。 参数类型ICommandHandler在类MessageLogger的构造函数中定义多次。 …即使装饰器显然只有一个ICommandHandler参数。 以下是抛出exception的完整工作示例: public interface ICommandHandler { void Execute(T command); } public class LogCommand { public string LogMessage { get; set; } public DateTime Time { get; set; } } public class Logger : ICommandHandler { public void Execute(LogCommand command) { Debug.WriteLine(string.Format(“Message \”{0}\” sent […]

Unity .NET:依赖项列表

是否可以在Unity或其他类型的IoC库中注入这样的依赖项列表 ? public class Crawler { public Crawler(IEnumerable parsers) { // init here… } } 通过这种方式,我可以在我的容器中注册多个IParser,然后解决它们。 可能吗? 谢谢

Castle Windsor:强制解析器使用指定的构造函数

这是一个例子: interface IComponentA {}; class ComponentA : IComponentA { }; interface IComponentB { }; class ComponentB : IComponentB { }; interface IComponentC { }; class ComponentC : IComponentC { public ComponentC(IComponentA a) { Console.WriteLine(“Constructor A”); } public ComponentC(IComponentB b) { Console.WriteLine(“Constructor B”); } }; 所有这些组件都在Castle Windsor容器中注册。 但是ComponentC类有2个重载的构造函数。 当激活ComponentC时,可以使用它们中的任何一个。 我需要使用ComponentC(IComponentB b)构造函数。 我暂时使用UsingFactoryMethod()方法来解决这个问题: container .Register(Component .For() .ImplementedBy()) […]

将依赖项注入DelegatingHandler

我是dependency injection的新手,但对Ninject和Ninject.Extensions.Logging感到很满意,只要我需要它就可以[Inject]我的ILogger 。 然而,一些DelegatingHandler正在破坏所有的乐趣。 public class HttpsHandler : DelegatingHandler { [Inject] public ILogger Logger { get; set; } protected override Task SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { if (!string.Equals(request.RequestUri.Scheme, “https”, StringComparison.OrdinalIgnoreCase)) { Logger.Info(String.Format(“{0}: is using HTTP”, request.RemoteAddress()); return Task.Factory.StartNew( () => new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(“HTTPS Required”) }); } return base.SendAsync(request, cancellationToken); } […]