Tag: unity container

团结汽车工厂与params

我正在试图找出正确的方法来注入一个需要参数的自动工厂,或者即使Unity可以实现这一点。 例如,我知道我可以这样做: public class TestLog { private Func logFactory; public TestLog(Func logFactory) { this.logFactory = logFactory; } public ILog CreateLog() { return logFactory(); } } Container.RegisterType(); TestLog test = Container.Resolve(); ILog log = test.CreateLog(); 现在我希望能做的是: public class TestLog { private Func logFactory; public TestLog(Func logFactory) { this.logFactory = logFactory; } public ILog CreateLog(string name) { […]

例外情况是:InvalidOperationException – 当前类型,是一个接口,无法构造。 你错过了类型映射吗?

在我的引导程序中: namespace Conduit.Mam.ClientServices.Common.Initizliaer { public static class Initializer { private static bool isInitialize; private static readonly object LockObj = new object(); private static IUnityContainer defaultContainer = new UnityContainer(); static Initializer() { Initialize(); } public static void Initialize() { if (isInitialize) return; lock (LockObj) { IUnityContainer container = defaultContainer; //registering Unity for MVC DependencyResolver.SetResolver(new UnityDependencyResolver(container)); //registering […]

C#/ Unity中的构造函数注入?

我正在使用C#和Microsoft的Unity框架。 我不太清楚如何解决这个问题。 这可能与我对Unity缺乏理解DI有关。 我可以使用以下示例代码总结我的问题: class Train(Person p) { … } class Bus(Person p) { … } class Person(string name) { … } Person dad = new Person(“joe”); Person son = new Person(“timmy”); 当我在Bus上调用resolve方法时,如何确保注入名为’timmy’的Person’son’并在解析Train时如何确定具有当时名称’joe’的Person’add’得到解决? 我想也许可以使用命名实例? 但我不知所措。 任何帮助,将不胜感激。 顺便说一句,我宁愿不创建一个IPerson接口。

无法安装NuGet包

我正在尝试将Unity包添加到我的解决方案中,但我一直收到列出的消息: 试图解决依赖’Unity(≥3.5.1404.0)’。 ‘Unity’已经为’CommonServiceLocator’定义了依赖关系。 任何想法如何解决这个问题?

使用不带HTTP请求的PerRequestLifetimeManager解析类型

我有一个使用IoC与Unity的MVC应用程序,我有一个使用PerRequestLifetimeManager定义的DbContext实现。 该对象通过工作单元实现注入控制器。 container.RegisterType(new PerRequestLifetimeManager()); 到目前为止,一切都运行良好,应用程序有相当数量的模型和控制器。 现在我最近要做的是为这个应用程序添加一些自动化任务,为此我想使用HangFire 。 我在我的项目中设置了这个库并创建了一个简单的任务,我想在其中调用一个需要DBContext的动作。 RecurringJob.AddOrUpdate(() => MyTask(), Cron.Daily); 和MyTask()定义如下 public void MyTask() { var taskManager = container.Resolve(); taskManager.DoSomething(); } 任务管理器需要一个DBContext实例(通过Unit of Work对象) public class TaskManager : ITaskManager { public TaskManager(IUnitOfWork uow) { … } } public class UnitOfWork : IUnitOfWork { public class UnitOfWork(DBContext context) { … } } 现在我遇到的问题是每当任务运行时我都会得到exception,说PerRequestLifetimeManager can […]

Unity Singleton Code

我是Unity的新手,我正在尝试编写一些Unity逻辑,它初始化并注册/解析Email对象的单例实例,以便它可以用于其他几个对象,下面的一个例子是OperationEntity。 所以当它注册时,它会使用配置文件中的一些值填充Email单例,然后每当创建一个OperationEntity实例时(在我的情况下它被反序列化)它就会使用相同的Email单例。 所以我的所有客户端逻辑需要做的是反序列化OperationEntity并调用PerformAction() – 使用Unity负责的电子邮件实例。 public interface IEmail { string FromName { get; set; } string FromEmailAddress { get; set; } } public class Email : IEmail { public string FromName { get; set; } public string FromEmailAddress { get; set; } public Email(string fromName, string fromEmailAddress) { FromName = fromName; FromEmailAddress = fromEmailAddress; } […]

使用Unity的策略模式和dependency injection

我终于忍受了Dependency Injection(早就应该); 我开始玩Unity并遇到战略模式的问题。 我可以使用容器向我返回基于名称的策略的特定实现,但我没有看到我应该如何在上下文中获得正确的策略。 让我们举一个简单的例子说明:上下文是一辆汽车,它有一个IEngine(战略),有2个实现,FastEngine和SlowEngine。 代码将沿着这些方向看: public interface IEngine { double MaxSpeed { get; } } internal class FastEngine:IEngine { public double MaxSpeed { get { return 100d; } } } internal class SlowEngine:IEngine { public double MaxSpeed { get { return 10d; } } } public class Car { private IEngine engine; public double […]

为ASP.NET身份配置Unity DI

我正在成功地使用Unity进行所有常规构造函数注入,例如存储库等,但我无法使用ASP.NET Identity类。 设置是这样的: public class AccountController : ApiController { private UserManager _userManager { get; set; } public AccountController(UserManager userManager) { if (userManager == null) { throw new ArgumentNullException(“userManager”); } _userManager = userManager; } // … } 使用Unity的这些配置: unity.RegisterType(); unity.RegisterType<UserManager>(new HierarchicalLifetimeManager()); unity.RegisterType<IUserStore, UserStore>(new HierarchicalLifetimeManager()); 这与Autofac,Ninject的其他post相同,例如,但在我的情况下它不起作用。 错误消息是: 尝试创建“AccountController”类型的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 手动创作当然是: public AccountController() : this(new UserManager(new UserStore(“Mongo”))) { […]

dependency injection统一 – 条件解析

有条件的解决是我目前还不了解的最后一件事。 让我们说我们有一个接口IAuthenticate : public interface IAuthenticate{ bool Login(string user, string pass); } 现在我有两种类型的身份validation。 Twitter认证 public class TwitterAuth : IAuthenticate { bool Login(string user, string pass) { //connect to twitter api } } Facebook Auth public class FacebookAuth: IAuthenticate { bool Login(string user, string pass) { //connect to fb api } } 在unity配置中注册类型: unityContainer.RegisterType(); unityContainer.RegisterType(); 在我们的控制器中通过DI注入对象: […]