Tag: dependency injection

将IoC容器引入旧版代码

我正在编写一个新的.NET库供我公司内部使用,它将通过dependency injection使用IoC。 当然,如果我们使用IoC容器来解析实例,这个库将更容易使用。 但是,将调用此库的代码当前不使用任何类型的dependency injection,并且重构遗留代码以使用DI超出了我的项目的范围。 那么,在这个遗留代码中开始使用Container从我的新库中获取实例的最佳方法是什么? 如果可能的话,我想避免乱丢遗留代码,硬编辑我选择的任何IoC容器。 由于我对DI相对较新,我们有可能会改变我们想要在某个时刻使用哪个Container的想法。 如果我将我的容器包装在CodePlex上的CommonServiceLocator库中,那么这是一种合理的方法吗? 其他人做了什么?

vNextdependency injection通用接口

我创建了一个ASP.Net vNext Web API。 我已经成功地使用了一个简单的接口,例如: services.AddScoped(); 但是,我无法弄清楚如何使用通用接口进行依赖性约定。 如何为此接口设置dependency injection: public interface IMongoConnectionHandler where T : IMongoEntity

用Unity填充集合的方法

我有两个示例类 class ClassToResolve { private List _coll; public ClassToResolve(List coll) { _coll = coll; } } class CollectionItem { //… } 我需要解决ClassToResolve var classToResolve = new ClassToResolve( new List() { new CollectionItem(), new CollectionItem(), new CollectionItem() } ); 现在我以某种方式解决它 var classToResolve = new ClassToResolve( new List() { unity.Resolve(), unity.Resolve(), unity.Resolve() } ); 有没有办法使用动态注册解决Unity的ClassToResolve?

使用Unity将依赖项注入自定义ActionFilter

目前,我有一个自定义ControllerFactory,我注入我的Unity容器: 在global.asax Application_Start()中: var container = InitContainer(); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var factory = new UnityControllerFactory(container); ControllerBuilder.Current.SetControllerFactory(factory); 在控制器工厂中,我将控制器设置为使用自定义ActionInvoker,如下所示: protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { var controller = base.GetControllerInstance(requestContext, controllerType) as Controller; if (controller != null) controller.ActionInvoker = new UnityActionInvoker(_container); return controller; } 最后在我的自定义ActionInvoker中,我尝试使用ActionInvokers容器构建调用的操作: protected override ActionExecutedContext InvokeActionMethodWithFilters( ControllerContext controllerContext, IList filters, ActionDescriptor actionDescriptor, IDictionary parameters) […]

如何将连接字符串注入IDbContextFactory 的实例?

我正在使用Entity Framework 5和Code First Migrations。 我有一个从DbContext派生的DataStore类: public class DataStore : DbContext, IDataStore { public int UserID { get; private set; } public DataStore(int userId, string connectionString) : base(connectionString) { UserID = userId; } public virtual IDbSet Users { get; set; } // Rest of code here } 还有一个工厂类,它创建DataStore类的DataStore : public class DataStoreFactory : Disposable, IDataStoreFactory […]

如何使用Unity 2.0注入Log4Net ILog实现

最终这与设置log4Net有关,但一般来说问题不是特定于日志记录。 一般来说,我想弄清楚的是,在Microsoft Unity 2.0中,如何做到与Castle.Facilities.Logging.LoggingFacility相同的东西。 即能够声明对记录器的依赖性,并使用注入它的对象的类型初始化记录器。 本着考验的精神值得千言万语,这就是我所需要的: class Logger_IOC_Tests { //[Test] public void Logger_should_be_initialized_with_the_type_of_the_object_that_is_using_it() { var container = new UnityContainer(); /* Configuration Magic probably involiving registering either * a custom IDependencyResolverPolicy or BuilderStrategy * goes here… */ container.RegisterType(new ContainerControlledLifetimeManager()); var user = container.Resolve(); Assert.True(user.Logger.GetUserType() == user.GetType()); } } interface ILogger { Type GetUserType(); } class Logger […]

如何正确使用Unity将ConnectionString传递给我的存储库类?

我刚刚开始使用微软的Unity应用程序块dependency injection库,而且我已经解开了。 这是我的IoC类,它将处理我的具体类到它们的接口类型的实例化(所以每次我想在我的控制器中存储库时,我不必在IoC容器上保持调用Resolve): public class IoC { public static void Intialise(UnityConfigurationSection section, string connectionString) { _connectionString = connectionString; _container = new UnityContainer(); section.Configure(_container); } private static IUnityContainer _container; private static string _connectionString; public static IMovementRepository MovementRepository { get { return _container.Resolve(); } } } 所以,我的想法是,从我的控制器,我可以做到以下几点: _repository = IoC.MovementRepository; 我目前收到错误: exception是:InvalidOperationException – 无法构造String类型。 您必须配置容器以提供此值。 现在,我假设这是因为我的映射具体实现需要为其构造函数提供单个字符串参数。 具体课程如下: […]

如何在WPF应用程序中组合MVVM和dependency injection?

您能否举例说明如何使用(您最喜欢的)DI框架为WPF应用程序连接MVVM View Models? 您是否会创建一个强连接的View Models层次结构(例如,每个嵌套控件的ViewModel是父ViewModel上的属性,并将它绑定到XAML中的嵌套控件的DataContext),或者您将使用某种更抽象的“”查看模型“管理器”,它维护一些弱连接的层次结构……就像在CAB中一样,也许?

带有DI Simple Injector的log4net

我正在尝试使用Simple Injector(+ integration MVC)v 2.5.2。 对于MVC 4应用程序,我也需要跟踪/记录性能(执行)(通过log4net模块)。 当前实现(在运行时)在指定的路径中创建log4net文件,但没有写入任何文本行(当我调试它时,一切都没有错误到_logger.Info(“message”)的结尾)。 有没有人尝试使用Simple Injector DI for log4net? 我注册log4net模块的方式是: public static class LoggingModule { public static void RegisterServices(Container container) { string log4NetConfigFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “log4net.config”); log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(log4NetConfigFile)); var logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); container.RegisterSingle(logger); } } 并在Global.asax LoggingModule.RegisterServices(container); Log4net配置文件看起来像这样(我不认为有任何问题): 并打开/关闭我一直在使用的日志记录: private static void RegisterIPerformanceStatisticLogger(Container container) { if (ShouldLogPerformance()) { container.Register(WebLifestyle); } else […]

使用Castle Windsor将依赖项注入CustomAttribute

在我的ASP.Net MVC应用程序中,我实现了一个Custom ActionFilter来授权用户。 我使用CastleWindsor为所有控制器提供dependency injection,如下所示: protected virtual IWindsorContainer InitializeServiceLocator() { IWindsorContainer container = new WindsorContainer(); ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container)); container.RegisterControllers(typeof(HomeController).Assembly); ComponentRegistrar.AddComponentsTo(container); ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container)); return container; } 在我的CustomAttribute中,我需要一个由所有控制器使用的依赖项,但是我无法在属性中使用基于构造函数的注入。 那么这里最干净的方式是什么? 我该如何提供依赖?