Tag: dependency injection

多个RegisterAll注册使用与SimpleInjector相同的单例集

我正在使用Simple Injector为电子商务项目构建一个插件系统。 我正在使用RegisterAll来注册IPaymentProvider和IResourceRegistrar所有实现(以及更多)。 但这每次都会创建一个新实例。 建议在每种类型上使用RegisterSingle 。 但是在这种情况下如何实现这一目标呢? private static void RegisterMultipleUnderOneInterface( Container container, string name) { IEnumerable pluginRegistrations = from dll in finder.Assemblies from type in dll.GetExportedTypes() where type.GetInterfaces().Any(i => i.Name == name) where !type.IsAbstract where !type.IsGenericTypeDefinition select type; if (pluginRegistrations.Any()) { var @interface = pluginRegistrations.ElementAt(0).GetInterfaces() .First(i => i.Name == name); foreach (Type type in […]

如何使用StructureMap v2.6解析signalR v2.0

在Global.asax的Application_Start中,我有以下内容 ObjectFactory.Initialize(cfg => { cfg.For().Singleton().Add (); }); 我的Hub接口是 public interface IDashboardHub { void Initialize(); } 我的中心如下: public class DashboardHub : Hub, IDashboardHub { private readonly ICpeAccountService _accountService; public DashboardHub(ICpeAccountService service) { _accountService = service; } [Authorize] public void Initialize() { Clients.All.UpdateStatus(“Hello World!!!”); } } 如果我删除注入的构造函数和解析器,那么我得到“Hello World”信号,JavaScript显示值。 如果我只是删除解析器,那么signalR不再找到无参数构造函数,并且不会调用Initialize方法。 如果我包含StructureMap依赖项解析器(它正在工作并立即注入大约40个其他类),那么我得到以下exception消息 StructureMap configuration failures: Error: 104 Source: Registry: […]

如何在asp.net core和ef7中的并行方法中使用注入的DbContext?

我有一个EF7的Asp.net 5 / Core 1应用程序。 我通常在DI容器中注册DbContext。 services.AddEntityFramework().AddSqlServer() .AddDbContext(options => options.UseSqlServer(connection)); 这是一个小样本,展示了我正在尝试做的事情。 public class MyController : Controller { MyDbContext _myDbContext; public MyController(MyDbContext myDbContext) { _myDbContext = myDbContext; } public IActionResult Index() { //Just start these and don’t wait for them to finish //We don’t care if they succeed or not Task.Run(() => DoSomeLogging1()); Task.Run(() => DoSomeLogging2()); […]

NInject扩展工厂

在阅读了NInject v3上的新文档以及如何使用Factory Extension之后 ,显然我仍然没有完全得到它,因为我的代码抛出exception到处… 我得到了这个例外,如果人们愿意,我可以粘贴整个东西,但我会尽量保持简短。 激活IDeployEntityContainer时出错没有匹配的绑定可用,并且该类型不可自我绑定。 这是我的代码…… Ninject Bind Module类 class MyNinjectModule : NinjectModule { public override void Load() { … Bind().ToFactory(); Bind().To(); … } } 使用工厂的类 class DeployController : IDeployController { private readonly IDeployEntityFactory _entityFactory; public DeployController(…, IDeployEntityFactory entityFactory) { … } public void Execute() { … //I get the Exception on this line… […]

如何使用Xamarin和Autofac将构造函数依赖项注入ViewModel?

我有一个ViewModel,我想在其中注入另一个类。 我正在使用Visual Studio和最新版本的Xamarin。 我正在使用Autofac来注册解析依赖项。 但我是新手,我遇到了一个我无法找到解决方案的问题,即使它可能很简单。 这是我想要注入另一个类的类: public IMessagingCenterWrapper MessagingCenterWrapper; public LoginViewModel(IMessagingCenterWrapper messagingCenterWrapper){ MessagingCenterWrapper = messagingCenterWrapper; } 然后在应用程序的入口点我有一个函数初始化容器,它注册并解析依赖项 static IContainer container{ get; set; } public App () { InitializeComponent(); InitializeIOCContainer(); } void InitializeIOCContainer() { var builder = new ContainerBuilder(); builder.RegisterType(); builder.RegisterType().As(); container = builder.Build(); var wrapper = container.Resolve(); var viewModel = container.Resolve(); } 但是在登录视图中的行中构建时出错: BindingContext = […]

ASP.Net MVC5和StructureMap4 – 简化方法

在将StructureMap.MVC5集成到ASP.Net MVC5 Web应用程序时,意识到它使用3.1版本的SM而不是4+。 然后尝试获取此Nuget中包含的文件并将其更改为SM4,但是有很多代码存在,并且SM3.1和SM4之间存在多个不兼容的调用。 有了这个,我最终编写了一个简单的IoC,如下所示。 寻找有关其不足之处的建议以及与此处链接的Nuget版本相比效率低下的问题。 定义默认注册表 public class DefaultRegistry : Registry { public DefaultRegistry() { Scan( scan => { scan.Assembly(“MyAssembly”); scan.WithDefaultConventions(); }); For<IContext>().Use(); } } 创建一个静态容器 public static class IoC { private static IContainer container = new Container(c => c.AddRegistry()); public static IContainer Container { get { return container; } } } 覆盖控制器工厂 public […]

Ninject在Kernel.Get和Constructor Injection之间的不同行为

我有什么: public interface IBla { } public class Bla1 : IBla { } public class Bla : IBla { } public class Consumer { private readonly IBla[] _array; public Consumer(IBla[] array) { _array = array; } } public static class NinjectExtensions { public class BindListExpression { private readonly IKernel _kernel; private readonly List _types = […]

ASP.net Session_Start方法中的dependency injection

我正在学习dependency injection并首次使用autofac。 我在几个autofac示例(见下文)中提到了构建容器,并从我的application_start调用 public class ContainerConfig { public static void RegisterContainer() { //Create a new ContainerBuilder var builder = new ContainerBuilder(); // Register all the controllers using the assembly object builder.RegisterControllers(Assembly.GetExecutingAssembly()); //Registering default convention — IExample and Example builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) .Where(t => t.Name.Single(i => i.Name == “I” + t.Name)) .AsImplementedInterfaces(); //Build the container var container = […]

MVVM和构造函数注入中的后台加载

我有一个问题,关于在WPF .NET 4.0中使用ViewModel加载大量数据的方式和位置(所以没有async / await:/)。 这是我的ViewModel: public class PersonsViewModel : ViewModelBase { private readonly IRepository _personRepository; private IEnumerable _persons; public IEnumerable Persons { get { return _persons; } private set { _persons = value; OnPropertyChanged(“Persons”); } } public PersonsViewModel(IRepository personRepository) { if (personRepository == null) throw new ArgumentNullException(“personRepository”); _personRepository = personRepository; } } 这个ViewModel用在Window中,我需要在Window打开时加载所有人。 我想到了很多解决方案,但我无法确定哪个是最好的(或者可能有更好的方法)。 […]

Autofac子依赖链注册

题 如何构造AutoFac ContainerBuilder,以便正确解析我的子依赖关系(假设接口的多个具体实现)? 默认注册/解析将不起作用,因为我有多个子依赖项的具体实现,并且子依赖项解析依赖于主对象的分辨率。 在所有情况下,我希望使用构造函数注入。 脚本 例如,假设我需要打印收据,因此我创建了一个名为IReceipt的接口,其中一个方法称为PrintReceipt()。 但我需要打印3种收据 标准收据 礼品收据 电子邮件收据 所有收据类型都有不同的格式,电子邮件收据根本不打印,而是通过电子邮件发送。 所以我希望我的IReceipt能够依赖格式化器和处理器。 假设我使用Process()方法创建IProcessor,它可以是打印机处理器,也可以是电子邮件处理器(打印机处理器负责打印机通信,电子邮件处理器负责与SMTP服务器通信) 。 此外,我创建了一个IFormatter,它可以将输入提供给处理器对象,格式化为标准收据,或礼品收据,甚至是电子邮件收据的HTML。 因此,关于IReciept的任何具体实现的构造函数现在需要两个依赖项–IFormatter和IProcessor。 现在,根据我需要决定的根构成,我是否正在解决用于标准收据,礼品收据或电子邮件收据的IReceipt。 我想调用容器Resolve()方法传递必要的参数,以便它解析正确的IReceipt。 此外,我希望注册ContainerBuilder知道,如果我尝试解决IReceipt标准收据的具体实现,它需要使用正确的标准收据IFormatter解决子依赖关系,并更正标准收据IProcessor。 对于礼品收据方案和电子邮件收据方案也是如此。 概括 所以 – 在所有这些 – 我的问题是 – 我如何构造ContainerBuilder,以便在设计时定义子依赖,并且单次调用Resolve()将正确识别所需的具体实现? 我不是在寻求与打印机对话或发布HTML的解决方案。 此问题严格适用于Autofac注册和解决方法。 在不同的客户端,我使用CastleWindsor使用了这个确切的策略,但我当前的客户端使用的是Autofac。