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; } } }