저는 Autofac을 처음 사용하고 있으며 문제가 있습니다.자동 팩스 등록 문제
다음 코드는 내 의존성을 등록하는 방법이며, 둘 다 (blah1/blah2) 등록되어 있고 둘 다 'true'를 반환하는지 확인합니다.
public AddInBootstrapper(Microsoft.Office.Interop.Outlook.NameSpace session)
{
var containerBuilder = new ContainerBuilder();
containerBuilder.Register(c => new OutlookService(session)).As<IOutlookService>();
containerBuilder.RegisterType<EmailPrintService>().As<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>();
_container = containerBuilder.Build();
var blah1 = _container.IsRegistered<IOutlookService>();
var blah2 = _container.IsRegistered<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>();
}
나중에 내 최대 유선 전망 리본 버튼을 클릭 (blah1가)로 여전히 등록 보여줍니다 첫 번째는, (blah2) 두 번째는 다시 '거짓'
private void printNowButton_Click(object sender, RibbonControlEventArgs e)
{
var blah1 = Globals.ThisAddIn.Core.IsRegistered<IOutlookService>();
var blah2 = Globals.ThisAddIn.Core.IsRegistered<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>();
var outlookSvc = Globals.ThisAddIn.Core.Resolve<IOutlookService>();
var printSvc = Globals.ThisAddIn.Core.Resolve<IPrintService<Microsoft.Office.Interop.Outlook.MailItem>>();
var folder = outlookSvc.GetFolder(@"public folders\all public folders\testpf\docprinttest\anotherfolder");
foreach (Microsoft.Office.Interop.Outlook.MailItem item in folder.Items)
{
if (item.Attachments.Count > 0)
{
// print attachments
}
printSvc.PrintItem(item);
}
}
어떤 아이디어를 제공?
편집 (여기에 코드의 나머지 부분입니다) :이
과정은 시작합니다 때 Outlook 추가의 부하 :
public partial class ThisAddIn
{
private AddInBootstrapper _core;
public AddInBootstrapper Core
{
get { return _core; }
}
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
_core.Dispose();
}
public override void BeginInit()
{
_core = new AddInBootstrapper(this.Application.Session);
base.BeginInit();
}
// some VSTO generated code here (non-modified)
}
IPrintService.cs :
namespace MRP.Outlook.DocPrint.Core.Services.Interfaces
{
public interface IPrintService<T>
{
void PrintItem(T item);
}
}
EmailPrintService.cs :
namespace MRP.Outlook.DocPrint.Core.Services
{
public class EmailPrintService : IPrintService<Microsoft.Office.Interop.Outlook.MailItem>
{
public EmailPrintService()
{
}
public void PrintItem(Microsoft.Office.Interop.Outlook.MailItem item)
{
//item.PrintOut();
System.Diagnostics.Debug.WriteLine("Printing: " + item.Subject);
}
}
}
즉, 추가 기능이로드되고 둘 다 등록됩니다. 버튼을 클릭합니다. 하나는 등록되어 있고 하나는 등록되어 있지 않습니다.
나는 문제가 우리에게 보여주고있는 코드에 있다고 생각하지 않지만 코드에서는 그렇지 않다고 생각합니다. –
그럴 수도 있지만, 어떻게 보이지 않습니다. 나머지는 지금 위에 추가됩니다. – raydenl
명백히 Generic Interface IPrintService와 관련이 있습니다. 인터페이스에서 제네릭을 제거한 것처럼 그것은 컨테이너에 등록 된 상태로 유지됩니다. – raydenl