5

プロジェクトでautofacを使用しようとしています。したがって、Mefでは、次のコードを使用してインターフェイスのインスタンスを取得できます。

private static CompositionContainer _container;

        public static void Initialize()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory.Contains(@"\bin") ?
                AppDomain.CurrentDomain.BaseDirectory :
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin");

            //DirectoryCatalog catalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"), "*.Data*.dll");
            DirectoryCatalog catalog = new DirectoryCatalog(path, "*.dll");
            _container = new CompositionContainer(catalog);
            _container.ComposeParts();
        }

        private static void CheckContainer()
        {
            if (_container == null)
            {
                Initialize();
            }
        }

        public static T GetInstance<T>()
        {
            CheckContainer();

            return _container.GetExportedValue<T>(); 
        }

しかし、autofacは私には混乱しているようです... autofacを使用してこの機能をアプリに追加するにはどうすればよいですか?

ありがとう


そのコードを次のように変更しました。

private static ContainerBuilder _container;
        private static IContainer container;

        public static void Initialize()
        {
            _container = new ContainerBuilder();
            var logging = Assembly.Load("StarlightFramework.Logging");
            _container.RegisterAssemblyTypes(logging);
            container = _container.Build();

        }

        public static T GetInstance<T>()
        {
            if(container == null)
                Initialize();
            return container.Resolve<T>();
        }

しかし、今回はこのエラーが発生します:「ファイルまたはアセンブリを読み込めませんでした'Autofac、Version = 2.6.1.841、Culture = neutral、PublicKeyToken=17863af14b0044da'またはその依存関係の1つ。」

何が問題なのでしょう?

4

2 に答える 2

12

まず、コンテナを構築してサービスを登録する必要があります。

var builder = new ContainerBuilder();
builder.RegisterType<MyService>().As<IMyService>(); 
var container = builder.Build();

Resolve次に、拡張メソッドを使用して、登録されたサービスのインスタンスを取得できます。

var service = container.Resolve<IMyService>();
于 2012-05-04T08:14:49.267 に答える
1

Autofac.dll アセンブリがアプリケーションの bin フォルダーに存在し、アセンブリが StarlightFramework.Logging で使用されるものと同じバージョンであることを確認してください。

于 2012-05-04T11:20:54.487 に答える