Unity.AutoRegistration ?? 基于会议的注册统一

我的代码如下

IUnityContainer container = new UnityContainer(); container .ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(Test).Assembly.Location) .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .ApplyAutoRegistration(); 

这是我的第一个问题。

我不确定我是否在这里正确使用了LoadAssemblyFrom方法:

 ITest test = container.Resolve(); 

当我尝试编译时,我得到exception“ResolutionFailedException”。

我究竟做错了什么?

感谢您提前的时间。

看来你正在寻找的是:

 container.ConfigureAutoRegistration() .LoadAssemblyFrom(typeof(ITest).Assembly.Location) .LoadAssemblyFrom(typeof(Test).Assembly.Location) .Include(If.ImplementsITypeName, Then.Register()) .ApplyAutoRegistration(); 

这将告诉Unity.AutoRegistration注册所有类型的接口,前缀为I。

这是一个完整的工作控制台示例,显示如何按惯例设置Unity进行注册,然后将控制转移到dependency injection世界。 您必须添加Unity NuGet包才能使用。

使用Unity v3.5和VS 2012进行测试。

 #region using System; using Microsoft.Practices.Unity; #endregion namespace Demo___Unity { internal class Program { private static void Main(string[] args) { using (var container = new UnityContainer()) { // Manual method. //container.RegisterType(); //container.RegisterType(); // Set up registration by convention. // http://blogs.msdn.com/b/agile/archive/2013/03/12/unity-configuration-registration-by-convention.aspx container.RegisterTypes( AllClasses.FromAssembliesInBasePath(), WithMappings.FromMatchingInterface, WithName.Default, WithLifetime.ContainerControlled); var controller = container.Resolve(); controller.Main(); } } } public interface IEntryPoint { string Name { get; set; } void Main(); } public class EntryPoint : IEntryPoint { private readonly IInjected Injected; public EntryPoint(IInjected injected) { Injected = injected; } public void Main() { Console.Write("Hello, world!\n"); Injected.SubMain(); Injected2.SubMain(); Console.Write("[any key to continue]"); Console.ReadKey(); } // Demonstrates property injection. [Dependency] public IInjected Injected2 { get; set; } public string Name { get; set; } } public interface IInjected { void SubMain(); } public class Injected : IInjected { public void SubMain() { Console.Write("Hello, sub world!\n"); } public string Name { get; set; } } }